我注意到,当运行连接到我们多台服务器的脚本(本质上是运行批处理命令)时,命令不会记录在用户的 .sh_history 或 .bash_history 文件中。是否有记录这些命令的地方(假设脚本本身不进行记录,并且我没有在任何地方输出)?
我专门谈论的是 AIX,但我认为这个问题适用于所有 *nix 版本。谢谢!
答案1
运行交互式 shell 时,.*_history 文件会被修改。就您而言,远程服务器登录到此框并运行脚本并退出进程,但不会调用交互式 shell。因此没有命令记录。
即使这不是远程服务器,也请考虑以下情况:
您在 shell 提示符下连续运行这些命令
# ls -l
# grep $(whoami) /etc/passwd
# netstat -rn
当你回顾 shell 历史记录时,你会看到这些命令。现在,将所有 3 个命令放入 shell 脚本中,并将其命名为“collect_data.sh”,对其进行 chmod 使其可执行,然后通过发出 # ./collect_data.sh 来执行它
当你回顾 shell 历史记录时,你看到了什么?这三个命令还是只是./collect_data.sh
?我敢打赌,是后者。
当您调用 shell 脚本时,无论它是在本地还是远程执行,您都会创建一个子 shell,命令会在该子 shell 下运行。这些 shell 是非交互式的,无法写入您的历史文件。当然,这只不过是以奇怪的方式重新编译您的 shell 可执行文件以允许此类活动,但为什么有人会这样做呢?
既然你问了这个问题,我感觉你认为有人在你不知情的情况下执行远程命令,这很可能是一些险恶的事情。如果是这样,你需要借助 tripwire 之类的审计应用程序。仅通过查看 shell 历史记录,即使命令存在,你也无法证明任何事情。
希望这可以帮助