Shell 安全访问未加密的文件
在shell脚本中,我想等待某个文件出现Shell 安全访问未加密的文件,shell,inotifywait,Shell,Inotifywait,在shell脚本中,我想等待某个文件出现 inotifywait -m -r -q -e close_write -e moved_to --format '%w/%f' $ARCHIVE_ROOT | while read FILE; do # Call other programs which process the file like stat or sha1sum done 我假设文件在处理代码时是有效的。不幸的是,该文件似乎消失了,例如在被sha1sum处理后。 我是否错过了一些明显
inotifywait -m -r -q -e close_write -e moved_to --format '%w/%f' $ARCHIVE_ROOT | while read FILE; do
# Call other programs which process the file like stat or sha1sum
done
我假设文件在处理代码时是有效的。不幸的是,该文件似乎消失了,例如在被sha1sum
处理后。
我是否错过了一些明显的东西,这是使文件持续的必要条件?许多进程创建临时文件并快速删除它们。这就是进步的本质 要防止在循环执行时删除文件,请使用硬链接: 如果文件在while循环开始之前被销毁,那么您将无能为力。但是,如果它存在于循环的开始,则使用硬链接将确保它在需要时继续存在 与的硬链接不会阻止其他进程更改文件。如果这是一个问题,则需要一份副本(
cp
)
要使其工作,临时文件必须与原始文件位于同一文件系统上
如果此应用程序是安全敏感的,您可能希望使用
mktemp
或其他此类实用程序来生成临时文件的名称。因此inotifywait
必须返回文件的路径和inode才能安全地工作!?如果在inotifywait脚本有机会运行之前文件已经被删除,那么使用inode仍然不能解决问题。正确,但是我会假设inode被reffed(由inotify)直到调用inotify的所有回调为止。
inotifywait -m -r -q -e close_write -e moved_to --format '%w/%f' $ARCHIVE_ROOT | while read FILE; do
ln "$FILE" tmpfile$$ || continue
sha1sum tmpfile$$
rm tmpfile$$
done