如何捕获临时创建的文件?

如何捕获临时创建的文件?

我有一个程序,它生成一些 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

相关内容