Il modo più semplice è utilizzare gli strumenti ACL, anche se in realtà non si utilizzano gli ACL. Basta chiamare getfacl -R . >saved-permissions
per eseguire il backup dei permessi di un albero di directory e setfacl --restore=saved-permissions
per ripristinarli.
Altrimenti, un modo per eseguire il backup dei permessi è con find -printf
. (GNU find è richiesto, ma è quello che hai su Linux.)
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions
Ottieni un file contenente record separati da un carattere nullo; ogni record contiene le autorizzazioni numeriche, il nome utente, il nome del gruppo e il nome del file per un file. Per ripristinare, esegui il loop sui record e chiama chmod
e chown
. Il -depth
opzione a find
è nel caso tu voglia rendere alcune directory non scrivibili (devi prima occuparti del loro contenuto).
Puoi ripristinare i permessi con questo frammento bash derivato da un frammento fornito da Daniel Alder:
while IFS=: read -r -d '' mod user group file; do
chown -- "$user:$group" "$file"
chmod "$mod" "$file"
done <saved-permissions
Puoi utilizzare il seguente script awk per trasformare il find
output in un codice shell per ripristinare i permessi.
find -depth -printf '%m:%u:%g:%p\0' |
awk -v RS='\0' -F: '
BEGIN {
print "#!/bin/sh";
print "set -e";
q = "\047";
}
{
gsub(q, q q "\\" q);
f = $0;
sub(/^[^:]*:[^:]*:[^:]*:/, "", f);
print "chown --", q $2 ":" $3 q, q f q;
print "chmod", $1, q f q;
}' > restore-permissions.sh
Installa prima il pacchetto ACL:
sudo apt-get install acl
Memorizza in modo ricorsivo autorizzazioni e proprietà del file:
getfacl -R yourDirectory > permissions.acl
Ripristina (rispetto al percorso corrente):
setfacl --restore=permissions.acl