在执行前验证命令二进制文件

Mil*_*vić 13 shell security bash shell-script

是否有任何方法可以检查您从 bash 脚本实际执行的内容?

假设您的 bash 脚本正在调用多个命令(例如:tar, mail, scp, mysqldump),并且您愿意确保这tar是实际的、真实的tar,这可由root作为文件和父目录所有者的用户以及唯一具有写入权限的用户确定而不是一些/tmp/surprise/tar与所有者www-data或apache2成为所有者。

当然我知道PATH和环境,我很想知道这是否可以从正在运行的 bash 脚本中额外检查,如果可以,究​​竟是如何检查的?

示例:(伪代码)

tarfile=$(which tar)
isroot=$(ls -l "$tarfile") | grep "root root"
#and so on...
Run Code Online (Sandbox Code Playgroud)

Dmi*_*yev 24

您可以从一开始就执行正确的二进制文件,而不是验证您要执行的二进制文件。例如,如果您想确保不会运行/tmp/surprise/tar,只需/usr/bin/tar在您的脚本中运行即可。或者,$PATH在运行任何东西之前将您的值设置为一个合理的值。

如果您不信任/usr/bin/和其他系统目录中的文件,则无法重拾信心。在您的示例中,您正在使用 来检查所有者ls,但是您怎么知道您可以信任ls?同样的论点适用于其他解决方案,例如md5sum和strace。

在需要对系统完整性具有高度信心的地方,使用IMA等专业解决方案。但这不是您可以从脚本中使用的东西:整个系统必须以一种特殊的方式进行设置,并具有不可变文件的概念。


Kus*_*nda 6

如果入侵者获得了对您系统的访问权并能够修改您的系统$PATH(/tmp在任何情况下都不应该包括在内),那么开始担心可执行文件的所有权为时已晚。

相反,您应该阅读有关如何处理入侵的信息。

最好集中精力完全避免入侵。

如果您有一个系统,这些事情很重要,那么将需要公开的部分与需要保密的部分隔离开来,并对通信模式进行审计可能是个好主意这之间。