如何追踪已经终止的进程?甚至追溯其父进程?

如何追踪已经终止的进程?甚至追溯其父进程?

我能够通过代理脚本将特定命令的执行限制给只有此脚本的 sudo 权限的用户sodo 点击此处了解如何sodo脚本还会记录他们命令的所有关键命令:

所以:

#!/bin/bash
# pass command by non-sudoers who can only run some command via this script
case $1 in
  firewall-cmd|ip|systemctl)
    #echo $*
    eval $*
    ret=$?
    ;;
  *)
     echo 'your request is not allowed yet, please contact the root user'
     exit 1
     ;;
esac

if [ $ret -eq 0 ];then
  echo `date +"%Y-%m-%d %X"`": executed order from" `pwd` "by pid" $$ "to" $* >> /root/sodo.log
fi

您可能会争辩说,上面的脚本没有根据$USER运行者的身份记录确切的用户firewall-cmd|ip|systemctl。 正确,这是因为他们sodoroot用户身份运行,$USER=root因此这 3 个用户将允许他们运行,因为他们的 sudo 权限不包括 3。

但这里有一个漏洞 - 它们可以sodo在某个公共路径内的 Python 脚本中运行var,并且无法确定是谁运行了它(谁恶意停止了服务)。现在我已经记录了$$要运行的 pid sodo,是否可以将父 pid 追溯到登录过程以确定谁是实际指挥官?


我找到了一种在处理此脚本时追溯其父用户的方法 - 因为它的父进程尚未死亡并且$$可以通过基本搜索追踪有关它的一切ps,所以可以记录其父进程的用户,即该脚本的真正指挥官。

相关内容