Linux에서 sudo를 사용하여 특정 명령을 실행하는 사용자의 ID를 찾는 방법

Linux에서 sudo를 사용하여 특정 명령을 실행하는 사용자의 ID를 찾는 방법

여러 사용자가 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가 변경됩니다.

관련 정보