Eseguire il backup e il ripristino delle autorizzazioni dei file


17

C'è un modo per eseguire il backup e ripristinare la proprietà e le autorizzazioni dei file (le cose che possono essere cambiate con chowne chmod)?

Puoi farlo in Windows usando icacls .

Che dire delle liste di controllo degli accessi?


Sarebbe utile se affermassi quale distribuzione stai usando, poiché diverse distribuzioni usano gestori di pacchetti diversi.
GarethTheRed

@garethTheRed, dipende anche dalla fs in uso, o solo dalla distribuzione?
leeand00

1
Dubito che dipenda dal filesystem.
GarethTheRed

Fino ad ora, non c'è una risposta perfetta.
Kittygirl,

Risposte:


24

Puoi farlo con i comandi dal pacchetto acl (che dovrebbe essere disponibile su tutte le distribuzioni tradizionali, ma potrebbe non far parte dell'installazione di base). Eseguono il backup e ripristinano ACL quando sono presenti ACL, ma funzionano anche con autorizzazioni di base anche su sistemi che non supportano ACL.

Per eseguire il backup delle autorizzazioni nella directory corrente e nelle sue sottodirectory in modo ricorsivo:

getfacl -R . >permissions.facl

Per ripristinare le autorizzazioni:

setfacl --restore=permissions.facl

Hmm. Ho davvero bisogno di leggere su ACL.
roaima,

1
Nel file generato, sono anche relativi a una directory?
leeand00

2
@ leeand00 Sì, il file generato utilizza sempre nomi di file relativi.
Gilles 'SO- smetti di essere malvagio' il

@ Gilles, basato sui file unix.stackexchange.com/questions/364517/… setfacl , quindi non è chmodpiù possibile, forse causerà conflitto?
kittygirl,

1
@kittygirl Non ho idea di cosa stai chiedendo. Che cosa significa "setfacl quindi non è più possibile chmod"? Cosa c'entra questo con unix.stackexchange.com/questions/364517/… ? Quale conflitto?
Gilles 'SO- smetti di essere cattivo'

2

Non sono a conoscenza di nulla di "pronto all'uso" che possa fare questo. Ecco uno script iniziale per te che gestirà le autorizzazioni di base. Non gestisce ACL di nessuna descrizione, ma la tua Domanda li esclude esplicitamente. (Fallirà anche su nomi di file patologici - quelli che iniziano con spazi bianchi o che contengono caratteri non stampabili.)

Salva le autorizzazioni

find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list

Ripristina le autorizzazioni

while read PERMS OWNER GROUP FILE
do
    chmod "$PERMS" "$FILE"
    chown "${OWNER}:${GROUP}" "$FILE"
done </tmp/save-the-list

vuoi dire che ACL fallirà anche su nomi di file patologici?
kittygirl,

@kittygirl Non ho incluso alcuna elaborazione di ACL nello scriptlet perché l'OP li aveva esplicitamente esclusi dai requisiti. Puoi aggiungere quello che ti piace, tenendo presente che il codice non è particolarmente robusto (vedi il commento che descrive i nomi di file patologici).
roaima,

Ho trovato un problema: impossibile trovare .htaccess, gitignore...
kittygirl,

0
#!/bin/bash
# prepare files
home="/home/exchange"
cd $home
>acl
echo "#!/bin/bash">recovery_acl.sh
echo "cd $home">>recovery_acl.sh
f='./'
# create acl file sorted by dir_level
for i in `seq 0 15`;do
  find . -mindepth $i -maxdepth $i -type d -exec getfacl {} +|grep -E '*UTS|file:'>>acl
done
sed -i 's/default\:user/\-dm\ u/g' acl
sed -i 's/default\:group/\-dm\ g/g' acl
sed -i 's/user/\-m\ u/g' acl
sed -i 's/group/\-m\ g/g' acl
sed -i 's/\#\ file\:\ /\.\//g' acl
sed -i 's,\\,\\\\,g' acl

while IFS='' read -r line ; do
  # grep dir name
  if echo "$line" | grep -q "$f" ; then
    dir="$line"
    continue
  fi
  echo setfacl $line '"'$dir'"'>>recovery_acl.sh
  # grep non def acl (for files)
  if echo "$line" | grep -q '\-m' ; then
    echo setfacl $line '"'$dir'"'/*>>recovery_acl.sh
  fi
done < "acl"

sed -i "s/\\\134/\\\\\\\134/g" recovery_acl.sh
sed -i "s/\\\040/\\\\ /g" recovery_acl.sh

Questo script bash ottiene acl solo dirs (nel mio caso file acls = dir (parent) acl) Dopo l'esecuzione dello script, verrà creato un altro "recovery_acl.sh".

Durante il ripristino di errori come "Nessun file o directory" significa che dir è vuoto o dirname ha due / più spazi insieme.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.