sudo
CentOS 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
?変数の設定を解除すると、動作は同じです。gncs
env
sudo
USERNAME
次のPythonプログラムを実行すると、この問題が発生しましたsudo
。
import getpass
getpass.getuser()
root
Centos 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()
ノート:これをコメントに追加したかったのですが、質問に答え始めたばかりで、コメントに追加するのに十分な評判がありません。
答え2
明らかに、sudo
プログラムはCentOS 7.3から7.4に変更されました。また、getpass
Pythonモジュールでは、関数はgetuser
最初に環境変数を使用しますが、これは最適ではないことがわかりました。
元の問題を解決するために、目的の動作を示す次のPythonコードスニペットを選択しました。
import os
import pwd
pwd.getpwuid(os.getuid()).pw_name