Linux

如何備份和比較文件權限?

  • December 22, 2015

有沒有辦法可以設置正確預設權限的文件夾和目錄的收據列表,可以用作備份以比較正確的權限並用於修復由系統或使用者更改以及安裝的軟體引起的錯誤權限?

例如; 您安裝了一些軟體包,並將其自身安裝到/usr/lib/其中,但它修改了文件夾或文件的權限,但是使用這些文件和文件夾的權限備份列表可以與之進行比較並在需要時進行更正。

file1 is -rwxrwxrwx but should be -rwxr-xr-x
folder1 is drwxrwxrwx but should be drwx------

依此類推……並使用腳本中的備份列表對列表以及目錄和文件夾進行檢查,並使用chown,chmod和更正它們setfacl

如何做到這一點,並在可能的情況下展示如何做到這一點的例子。如果需要保留或設置特定權限以防止在不應該發生的地方進行修改或更改,並且可能在每次重新啟動或系統更新後自動執行,並有其列表,這甚至可能對一般的 linux 伺服器有用在需要時自動將新的添加到列表中,而無需太多的使用者互動。

作為免責聲明,在對權限進行批量更改時請小心。如果您在更改權限的腳本中有錯誤,那可能會很糟糕。

也就是說,考慮這個例子:

創建一個您可以在其中進行試驗的目錄,然後切換到該目錄:

mkdir /tmp/experiment
cd /tmp/experiment

在目錄中創建一堆文件:

mkdir -p {a,b,c,d}/{e,f,g,h}/{i,j,k,l}
touch {a,b,c,d}/{m,n,o,p}
touch {a,b,c,d}/{e,f,g,h}/{q,r,s,t}
touch {a,b,c,d}/{e,f,g,h}/{i,j,k,l}/{u,v,w,x}

作為一個實驗,給所有文件隨機權限

for i in $(find . -type f); do
   chmod $(($RANDOM % 8))$(($RANDOM % 8))$(($RANDOM % 8)) $i
done

還給目錄隨機權限,但保留所有者的權限:

for i in $(find . -type d); do
   chmod 7$(($RANDOM % 8))$(($RANDOM % 8)) $i
done

使用以下命令創建權限恢復腳本stat

find . | xargs stat --printf="chmod %a %n\n" > /tmp/perms.sh

注意輸出格式:

head -n3 /tmp/perms.sh
chmod 715 .
chmod 700 ./b
chmod 250 ./b/n

現在刪除權限:

find . | xargs chmod 777

您現在可以使用腳本恢復權限:

bash /tmp/perms.sh

要驗證這是否有效,您可以像以前一樣找到新權限,但將它們保存到不同的文件中:

find . | xargs stat --printf="chmod %a %n\n" > /tmp/perms.sh_new

然後比較這兩個文件,並不是說沒有區別:

diff /tmp/perms.sh{,_new}

最簡單的方法是使用 ACL 工具:

getfacl -R / > /path/to/perms/file.acl

備份權限(傳統權限和 ACL)和所有權,以及

setfacl --restore=/path/to/perms/file.acl /

恢復它們。

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