rm
诸如、kill
和之类的危险命令systemctl stop
可以隐藏在 bash 输入之外 - 即 - 恶意用户可以轻松地使用os
模块将它们隐藏在 python 脚本中,只需运行 python 脚本作为代理即可隐藏他们真正想要破坏的内容,而 bash 历史记录或类似的东西只会留下他们在删除该脚本之前运行的记录,python3 [the malicious script].py
以隐藏他们真正做的事情。
我想要做的是每次执行这些关键命令时都记录下来(欢迎指出这 3 个命令以外的任何命令),无论它们来自何处。并且日志不得由除 root 之外的任何用户丢弃。
答案1
您可以使用auditd
和监视文件操作/系统调用来删除文件/目录。规则如下:
-a exit,always -S unlink -S rmdir -k Remove_dir_file
当然,您可以在规则中添加其他特定文件监控的调用,例如kill
:
-a exit,always -F arch=b64 -S kill -k Kill_Process
答案2
步骤 1:查找命令位置
which <command>
第 2 步:获取 aclgetfacl <command path>
步骤 3:用于setfacl
设置允许的用户的 acl
步骤 4:所有权限问题日志通常会在 /var/log 文件夹中的审计日志中提供。
希望这会有所帮助。
编辑:
我的印象是这个问题是通过程序来处理命令(不被视为低级代码)。
我们可以使用以下 auditctl 获取所有失败的打开调用(如果配置为监控/记录)
To see unsuccessful open calls:
auditctl -a exit,always -S open -F success=0
因此,sequence 将设置文件/命令的 acl,并通过它记录失败的系统调用,auditd
以便我们可以检查日志。通过这种方式,我们可以知道谁尝试执行了哪个命令或系统调用。
注意:我没有考虑程序是否以 root 身份执行的情况。