Permissions

監視 /tmp 以創建文件並防止刪除文件?

  • February 27, 2016

我有一個二進製文件,可以在其中創建一些文件/tmp/*some folder*並執行它們。這個相同的二進製文件在執行它們後立即刪除這些文件。有沒有辦法攔截這些文件?

我不能將文件夾設為只讀,因為二進製文件需要寫權限。我只需要一種方法來在執行文件時復製文件或阻止原始二進製文件刪除它們。

您可以在腳本中使用來自inotify-toolsinotifywait的命令來創建在. 例如,將所有創建的文件硬連結到:/tmp/some_folder``/tmp/some_folder``/tmp/some_folder_bak

#!/bin/sh

ORIG_DIR=/tmp/some_folder
CLONE_DIR=/tmp/some_folder_bak

mkdir -p $CLONE_DIR

inotifywait -mr --format='%w%f' -e create $ORIG_DIR | while read file; do
 echo $file
 DIR=`dirname "$file"`
 mkdir -p "${CLONE_DIR}/${DIR#$ORIG_DIR/}"
 cp -rl "$file" "${CLONE_DIR}/${file#$ORIG_DIR/}"
done

由於它們是硬連結,因此應在程序修改它們時更新它們,但在程序刪除它們時不應刪除它們。您可以正常刪除硬連結複製。

請注意,這種方法遠非原子方法,因此您需要依靠此腳本來創建硬連結,然後程序才能刪除新創建的文件。

如果要將所有更改複製到/tmp,可以使用更分佈式的腳本版本:

#!/bin/sh

TMP_DIR=/tmp
CLONE_DIR=/tmp/clone
mkdir -p $CLONE_DIR

wait_dir() {
 inotifywait -mr --format='%w%f' -e create "$1" 2>/dev/null | while read file; do
   echo $file
   DIR=`dirname "$file"`
   mkdir -p "${CLONE_DIR}/${DIR#$TMP_DIR/}"
   cp -rl "$file" "${CLONE_DIR}/${file#$TMP_DIR/}"
 done
}

trap "trap - TERM && kill -- -$$" INT TERM EXIT

inotifywait -m --format='%w%f' -e create "$TMP_DIR" | while read file; do
 if ! [ -d "$file" ]; then
   continue
 fi

 echo "setting up wait for $file"
 wait_dir "$file" &
done

chattr +a /tmp/*some folder*將文件夾設置為僅附加。可以創建和寫入文件,但不能刪除文件。完成後使用chattr -a /tmp/*some folder*

引用自:https://unix.stackexchange.com/questions/265992