Centos
CentOS 7 中的環境 USER 和 USERNAME
我偶然發現CentOS 7.3 和 CentOS 7.4 之間的變數
sudo
更改方式有所不同。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()
在 Centos 7.3 下它返回
root
,在 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"
顯然,該
sudo
程序已從 CentOS 7.3 更改為 7.4。另外,我了解到,在getpass
Python 模組中,函式getuser
首先使用環境變數,這不是最優的。為了解決我最初的問題,我選擇了以下似乎具有所需行為的 Python 程式碼。
import os import pwd pwd.getpwuid(os.getuid()).pw_name
CentOS 7.4 中的 sudo 程序發生了變化。問題實際上是使用者想要在 python 程式碼中獲取作業系統使用者名。所有方法似乎都依賴於環境變數,因此它可能不適用於所有場景。
您可以嘗試這些選項以使其至少在CentOS 7.3和7.4上執行
import commands username = commands.getoutput("logname") print username
import os os.getlogin()
注意:我會將此添加為評論,但我剛剛開始回答問題並且沒有足夠的聲譽將其添加為評論。