Centos

CentOS 7 中的環境 USER 和 USERNAME

  • September 24, 2017

我偶然發現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。另外,我了解到,在getpassPython 模組中,函式getuser首先使用環境變數,這不是最優的。

為了解決我最初的問題,我選擇了以下似乎具有所需行為的 Python 程式碼。

import os
import pwd
pwd.getpwuid(os.getuid()).pw_name

CentOS 7.4 中的 sudo 程序發生了變化。問題實際上是使用者想要在 python 程式碼中獲取作業系統使用者名。所有方法似乎都依賴於環境變數,因此它可能不適用於所有場景。

您可以嘗試這些選項以使其至少在CentOS 7.37.4上執行

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

import os
os.getlogin()

注意我會將此添加為評論,但我剛剛開始回答問題並且沒有足夠的聲譽將其添加為評論。

引用自:https://unix.stackexchange.com/questions/393361