여러 사용자가 sudo 계정을 가지고 있는 공유 환경에서 특정 스크립트를 호출한 기본 사용자 ID(sudo 계정 아님)의 세부 정보를 알고 싶습니다. 감사해요.
아래에서 시도했지만 내 요구 사항을 충족하지 않습니다. echo $USERNAME이 sudo 계정 세부 정보를 제공하지만 로그인 ID를 찾고 있습니다.
답변1
sudo
환경 변수를 SUDO_USER
실행하는 프로세스의 실제 사용자 ID에 해당하는 사용자 이름으로 설정하여 사용자 이름은 일반적으로 호출하는 사용자의 사용자 이름이 됩니다 sudo
.
또한 USER
대상 사용자에게 환경 변수를 설정합니다.
$ id -un
chazelas
$ sudo printenv SUDO_USER USER
chazelas
root
따라서 as를 호출하는 스크립트에서는 sudo the-script
에서 원래 사용자 이름을 찾을 수 있습니다 $SUDO_USER
.
Linux에서는 다음을 통해 특정 프로세스에 대한 정보를 찾을 수 있습니다 /proc/<pid>/environ
.
$ sudo sleep 3m &
[1] 97380
$ sudo grep -z '^SUDO_USER=' /proc/[1-9]*/environ | tr '\0' '\n'
/proc/97382/environ:SUDO_USER=chazelas
$ ps -fp 97382
UID PID PPID C STIME TTY TIME CMD
root 97382 97381 0 12:40 pts/8 00:00:00 sleep 3m
위의 구성을 포함한 일부 구성에서는 sudo
대상 명령이 동일한 프로세스에서 실행되는 대신 하위 프로세스에서 실행되고 종료될 때까지 기다립니다. sudo
프로세스의 실제 사용자 ID를 기반으로 명령을 호출한 사용자를 확인할 수 있습니다 .
$ ps -o ruser= -p 97380
chazelas
답변2
가능한 사용자 변경 사항의 전체 체인을 봅니다.
pstree -sul $(ps -C script.sh -o pid=)
-s
부모님에게 보여주세요.
-u
UI가 변경됩니다.