我知道我可以使用或类似命令查看已登录用户的列表w
。我想知道哪些已登录用户当前具有 root 访问权限,即已su
成为 root。输出w
仅显示第一个(实际)用户名,如果用户已完成,则不显示 root su
。
答案1
确实w
只显示登录 shell。如果用户su
对另一个程序 (shell) 执行了操作,则不会显示,因为它不是登录 shell。
这里的主要问题是,您试图关联并非设计为关联的日期。您必须从多个来源获取信息,然后进行交叉引用。
要获取所有使用 的用户列表su
,您可以检查/var/log/auth
(取决于您的发行版)。您将看到以下消息:
May 1 09:47:32 frisbee su[7000]: Successful su for root by mtak
May 1 09:47:32 frisbee su[7000]: + /dev/pts/5 mtak:root
您可以通过检查伪终端是否仍处于活动状态来检查哪些 pts 仍处于活动状态ls /dev/pts
(不过您必须快速完成此操作,因为 pts 会被重复使用)。您还可以使用伪终端的修改时间并将其与文件中的时间进行交叉引用auth.log
。您可以使用 找到 pts 的修改时间stat /dev/pts/
。
不可否认,它并不完美,但我认为通过一些脚本您将能够获得起诉的用户列表。
答案2
您可以使用它ps
来检查哪个用户正在运行某个su
进程。
ps aux | grep ' [s]u'
答案3
这应该会给你一个运行‘su -’以成为 root 的用户名列表:
for ppid in $(for pid in $(pgrep -u root -f "^su -"); do ps lh $pid | awk '{print $4;}'; done); do ps uh $ppid | awk '{print $1;}'; done | uniq