在多个用户拥有 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
uid 变化。