我有一个程序,它生成一些 shell 脚本,然后运行并删除它。是否有机会在不侵入生成该脚本的程序的情况下获取该脚本的内容?
答案1
您可以暂时用您选择的程序(例如cat
)替换脚本解释器,该程序可以让您检查屏幕上的脚本或将其存储在某个地方。根据定义,没有办法向解释器隐藏脚本。
如果所讨论的程序没有被设计为对脚本保密,您可能可以使用extundelete
您正在使用的文件系统的类似工具在磁盘上找到它。
答案2
我发现了这个不平凡的解决方案:
#!/bin/sh
file_path=$1/script-file-name
while inotifywait -e create "$1"; test ! -f "$file_path"
do
:
done
chmod g+rw "$file_path"
chown root "$file_path"
该脚本必须以 的权限运行root
:
sudo <catch-script> /dir/where/the/target/will/be/generated
以前,必须按如下方式更改将生成脚本的目录:
chown root /dir/where/the/target/will/be/generated
chmod 1775 /dir/where/the/target/will/be/generated
即我们将粘性位设置为放置脚本的目录。然后指定的(捕获)脚本等待创建目标脚本,为其设置写入权限(以便生成程序能够使用它)并将所有者更改为root
(以禁用删除) 。
答案3
将临时文件安排在保留所有文件版本的文件系统中,例如复制文件。使用示例:
mkdir /tmp/backend /tmp/recorded
copyfs-mount /tmp/backend /tmp/recorded
TMPDIR=/tmp/recorded myprogram
ls /tmp/backend
cat /tmp/backend/metadata.
…
fusermount -u /tmp/recorded