CentOS 7の環境USERとUSERNAME

CentOS 7の環境USERとUSERNAME

sudoCentOS 7.3とCentOS 7.4の間で変数を変更する方法の違いを見つけました。env

CentOS 7.3および7.4で実行するスクリプトは次のとおりです。

#!/bin/bash
env | grep USER

sudo env | grep USER

unset USERNAME

env | grep USER

sudo env | grep USER

CentOS 7.3では、以下を提供します(フォーマット済み)。

USER=gncs
USERNAME=gncs

[sudo] password for gncs: 
USERNAME=gncs
USER=root
SUDO_USER=gncs

USER=gncs

USER=root
USERNAME=root
SUDO_USER=gncs

CentOS 7.4では、次のものが提供されます(フォーマット済み)。

USER=gncs
USERNAME=gncs

[sudo] password for gncs: 
USERNAME=gncs
USER=gncs    # !!!
SUDO_USER=gncs

USER=gncs

USER=root
USERNAME=root
SUDO_USER=gncs

CentOS 7.4で動作していますが、なぜこれが起こり続けるのですかUSER?変数の設定を解除すると、動作は同じです。gncsenvsudoUSERNAME

次のPythonプログラムを実行すると、この問題が発生しましたsudo

import getpass
getpass.getuser()

rootCentos 7.3は7.4からを返しますgncs。私はこれが上記の環境変数に関連していると思います。

追加情報:

$ sudo --version
Sudo version 1.8.19p2
Sudoers policy plugin version 1.8.19p2
Sudoers file grammar version 45
Sudoers I/O plugin version 1.8.19p2

$ sudo grep -r env /etc/sudo*
[sudo] password for gncs: 
/etc/sudoers:# is already set when the the env_reset option is enabled, so
/etc/sudoers:# env_reset is disabled or HOME is present in the env_keep list.
/etc/sudoers:Defaults    env_reset
/etc/sudoers:Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
/etc/sudoers:Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
/etc/sudoers:Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
/etc/sudoers:Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
/etc/sudoers:Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
/etc/sudoers:# Adding HOME to env_keep may enable a user to run unrestricted
/etc/sudoers:# Defaults   env_keep += "HOME"

ベストアンサー1

CentOS 7.4ではsudoプログラムが変更されました。問題は、実際にユーザーがPythonコードでオペレーティングシステムのユーザー名を取得したいということです。すべての方法は環境変数に依存しているように見えるため、すべての場合で動作しない可能性があります。

少なくとも機能するには、次のオプションを試すことができます。セントOS 7.3そして7.4

import commands
username = commands.getoutput("logname")
print username

import os
os.getlogin()

ノート:これをコメントに追加したかったのですが、質問に答え始めたばかりで、コメントに追加するのに十分な評判がありません。

おすすめ記事