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 uid 变化。

相关内容