如何记录 Linux 上特定命令的执行情况,无论它来自何处?

如何记录 Linux 上特定命令的执行情况,无论它来自何处?

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 身份执行的情况。

相关内容