如何追踪进程到原始用户?

如何追踪进程到原始用户?

假设,在 Solaris 服务器上,user1登录,切换到其他用户(例如sruser,使用 id )su -,然后启动 id 进程X。然后另一个用户user2登录,切换到sruser相同的方式并启动 id 的进程Y。 (多个用户可以同时登录和切换sruser。)

X在上面的场景中,我们有什么方法可以跟踪 ids和的进程Y到实际用户user1user2吗?

我们如何追踪进程到原始用户?

答案1

有生成进程树的命令。 'ps' 采用选项 'fu' ,我认为 Sun 有 ptree。

答案2

没有标准的方法,据我所知,Solaris 也没有方法。如果有一种可靠的方法来找出“祖先”用户,那么 root 可以执行所有操作的常见 UNIX 安全模型就不再成立。

您可以递归地检查每个进程的父进程。 (警告,未经测试的脚本。)

pid=$1 pids=$pid user=
while pid=$(ps -o ppid= $pid); do
  user=$(ps -o ruser= $pid)
  case $user in
    0|root) :;;
    *) break;;
  esac
done
echo $user

但这并不能保证给出任何结果。也许父进程的父进程已经退出。

您可以检查进程正在哪个终端运行 ( ps -o tty= $pid) 并检查最后登录该终端的人员 ( who, last)。但这只是指示性的:root 可以在任何终端上启动进程。

如果 user1 运行,您希望看到什么su user2 -c 'su user1 -c …'?可以想象,操作系统将跟踪与进程相关的内核数据结构中的连续身份验证链,但这与通常的 UNIX 安全模型相去甚远。

相关内容