Unix: esiste un modo per "copiare" i permessi di file o directory?


14

Ho due file in una directory. Uno ha i permessi corretti e l'altro no. Esiste un modo per "copiare" il set di autorizzazioni da un file a un altro?

Risposte:


15

La versione GNU dell'utilità chmod può copiare la modalità da un file ( RFile) a un altro ( file).

chmod --reference=RFile file

I coreutils GNU si trovano nella maggior parte delle distribuzioni Linux e Cygwin, tra gli altri posti. Non tutte le implementazioni di chmod forniscono questa opzione.


Hm ... sembra che dovrebbe funzionare, ma non supportato su Mac OS X? Lì ottengo solo un'opzione illegale ...
Svish,

2
chmod non è un comando incorporato bash . è un'utilità separata disponibile su molti unix. l' --referenceopzione è inclusa nella versione GNU; OSX probabilmente utilizza un chmod che ha origine invece con BSD. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
quack quixote

Svish, potresti prendere in considerazione l'installazione delle versioni GNU tramite MacPorts.
Jeremy L

Ho appena pensato che sarebbe utile menzionare qui che cp -dpR <source-file> <dest-file>, durante la copia di un file, verranno copiati i permessi e il file.r
LawrenceC

1

Ho pensato a questo:

find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh

Non è completamente a prova di proiettile, ma fa quello che mi serve.


0

prova questo:

find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;

questo aumenterebbe in modo ricorsivo e chmod ogni file, se due directory non corrispondono sui file vedrai un sacco di errore "Nessun file o directory simile".


find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
Rick Sanchez,

chmod: impossibile ottenere gli attributi di '/ home / myubuntuuser / Desktop / test2 // home / myubuntuuser / Desktop / test1': nessun tale file o directory chmod: impossibile ottenere gli attributi di '/ home / myubuntuuser / Desktop / test2 // home / myubuntuuser / Desktop / test1 / 111.txt ': nessun file o directory simile chmod: impossibile ottenere gli attributi di' /home/myubuntuuser/Desktop/test2//home/myubuntuuser/Desktop/test1/222.txt ': No tale file o directory chmod: impossibile ottenere gli attributi di '/home/myubuntuuser/Desktop/test2//home/myubuntuuser/Desktop/test1/333.txt': Nessun file o directory del genere
Rick Sanchez,

testato su 2 cartelle: test1 e test2. ognuno ha gli stessi file 111/222 / 333.txt con autorizzazioni diverse. test1 ha quelli predefiniti. test2 ha 777 autorizzazioni. questo è l'errore che ottengo.
Rick Sanchez,

0

È possibile utilizzare getfaclper recuperare l'elenco completo di autorizzazioni file, proprietario, gruppo e ACL aggiuntivi (elenchi controllo accessi).

$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---

Se si salva l'output in un file (ad esempio acl.txt), è possibile ripristinare da questo formato con setfacl --restore acl.txt. Se desideri ripristinare solo un singolo file e tale file ha un nome file diverso dall'originale, ti consigliamo di utilizzare setfacl --set-file acl.txt filename.txt(dovefilename.txt trova il nuovo nome file).

passi

  1. Salva le autorizzazioni originali in acl.txt:

    $ getfacl filename.txt > acl.txt
    
  2. Sovrascrivi le autorizzazioni (per la dimostrazione; questo è solo per poter vedere che il ripristino nel passaggio successivo funziona)

    $ chmod 777 filename.txt
    $ sudo chown nobody:root filename.txt
    $ ls -l filename.txt
    -rwxrwxrwx 1 nobody root 0 Jan  8 14:24 filename.txt
    
  3. Utilizzare setfaclper ripristinare le autorizzazioni corrette da acl.txt:

    $ sudo setfacl --restore acl.txt
    $ ls -l filename.txt
    -rw------- 1 score score 0 Jan  8 14:24 filename.txt
    

Il nome file è preso dal # file:commento generato da getfacl, quindi non è necessario specificarlo sulla riga di comando.

Se si desidera ripristinare tali autorizzazioni in un altro file, è possibile utilizzare --set-fileinvece di --restorecosì:

$ setfacl --set-file acl.txt second_filename.txt

Esempio

Se finisci per sovrascrivere le autorizzazioni su alcuni file /usr, ma non sai quali file hai sovrascritto, di solito puoi correggerlo ripristinando da un altro sistema configurato in modo simile.

  1. Autorizzazioni di backup dal sistema di lavoro (nota: getfaclgenera percorsi relativi, quindi assicurati di avere cduna posizione coerente su entrambe le macchine)

    # cd /
    # getfacl -R usr > /root/acls.txt
    
  2. Copia il dump ACL sul sistema con permessi non funzionanti

    $ scp root@working-system:/root/acls.txt .
    $ scp acls.txt root@broken-system:/root/
    
  3. Ripristinare il dump ACL per sovrascrivere i permessi non funzionanti con quelli della buona macchina conosciuta

    # cd /
    # setfacl --restore /root/acls.txt
    
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.