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()

노트:이것을 댓글로 추가하고 싶었지만 방금 질문에 답변하기 시작했고 댓글로 추가할 만큼 평판이 충분하지 않습니다.

답변2

분명히 sudo프로그램은 CentOS 7.3에서 7.4로 변경되었습니다. 또한 getpassPython 모듈에서는 함수가 getuser환경 변수를 먼저 사용하는데 이는 최적이 아니라는 것을 알게 되었습니다.

원래 문제를 해결하기 위해 원하는 동작을 보이는 다음 Python 코드 조각을 선택했습니다.

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

관련 정보