我能够通过代理脚本将特定命令的执行限制给只有此脚本的 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
。 正确,这是因为他们sodo
以root
用户身份运行,$USER=root
因此这 3 个用户将允许他们运行,因为他们的 sudo 权限不包括 3。
但这里有一个漏洞 - 它们可以sodo
在某个公共路径内的 Python 脚本中运行var
,并且无法确定是谁运行了它(谁恶意停止了服务)。现在我已经记录了$$
要运行的 pid sodo
,是否可以将父 pid 追溯到登录过程以确定谁是实际指挥官?
我找到了一种在处理此脚本时追溯其父用户的方法 - 因为它的父进程尚未死亡并且$$
可以通过基本搜索追踪有关它的一切ps
,所以可以记录其父进程的用户,即该脚本的真正指挥官。