Unix: Czy istnieje sposób na „skopiowanie” uprawnień do pliku lub katalogu?

14

Mam dwa pliki w katalogu. Jedno ma prawidłowe uprawnienia, a drugie nie. Czy istnieje sposób na „skopiowanie” zestawu uprawnień z jednego pliku do drugiego?

Svish
źródło

Odpowiedzi:

15

Wersja GNU narzędzia chmod może kopiować tryb z jednego pliku ( RFile) na inny ( file).

chmod --reference=RFile file

Coreutils GNU można znaleźć między innymi w większości dystrybucji Linuksa i Cygwin. Nie wszystkie implementacje chmod zapewniają tę opcję.

Jeremy L.
źródło
Hm ... wygląda na to, że to powinno działać, ale nie jest obsługiwane w Mac OS X? Tam dostaję tylko nielegalną opcję ...
Svish
2
chmod nie jest wbudowanym poleceniem bash . jest to oddzielne narzędzie dostępne w wielu systemach uniksowych. --referenceopcja jest w wersji GNU; OSX prawdopodobnie używa zamiast tego chmod, który pochodzi z BSD. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/...
quack quixote
Svish, możesz rozważyć zainstalowanie wersji GNU przez MacPorts.
Jeremy L
Właśnie pomyślałem, że warto tu wspomnieć, że cp -dpR <source-file> <dest-file>podczas kopiowania pliku, uprawnienia do kopiowania, a także plik.r
LawrenceC
1

Wymyśliłem to:

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

Nie jest w pełni kuloodporny, ale robi to, czego potrzebuję.

Ikem Krueger
źródło
0

Spróbuj tego:

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

spowoduje to rekursywne przejście w górę i przeskok do każdego pliku, jeśli dwa katalogi nie pasują do plików, zobaczysz dużo błędu „Brak takiego pliku lub katalogu”.

bersam
źródło
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
Rick Sanchez
chmod: nie udało się pobrać atrybutów '/ home / myubuntuuser / Desktop / test2 // home / myubuntuuser / Desktop / test1': Brak takiego pliku lub katalogu chmod: nie udało się pobrać atrybutów '/ home / myubuntuuser / Desktop / test2 // home / myubuntuuser / Desktop / test1 / 111.txt ': Brak takiego pliku lub katalogu chmod: nie można pobrać atrybutów' /home/myubuntuuser/Desktop/test2//home/myubuntuuser/Desktop/test1/222.txt ': Nie taki plik lub katalog chmod: nie udało się pobrać atrybutów „/home/myubuntuuser/Desktop/test2//home/myubuntuuser/Desktop/test1/333.txt”: Brak takiego pliku lub katalogu
Rick Sanchez
przetestowałem na 2 folderach: test1 i test2. każdy ma te same pliki 111/222 / 333.txt z różnymi uprawnieniami. test1 ma domyślne. test2 ma 777 uprawnień. to jest błąd, który dostaję.
Rick Sanchez
0

Możesz użyć getfacldo pobrania pełnej listy uprawnień do plików, właściciela, grupy i dodatkowych list ACL (list kontroli dostępu).

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

Jeśli zapiszesz to wyjście w pliku (np. acl.txt), Możesz następnie przywrócić z tego formatu za pomocą setfacl --restore acl.txt. Jeśli chcesz przywrócić tylko jeden plik, a ten plik ma inną nazwę pliku niż oryginał, będziesz chciał użyć setfacl --set-file acl.txt filename.txt(gdzie filename.txtjest nowa nazwa pliku).

Kroki

  1. Zapisz oryginalne uprawnienia do acl.txt:

    $ getfacl filename.txt > acl.txt
    
  2. Nadpisz uprawnienia (do demonstracji; to po prostu, abyś mógł zobaczyć, że przywrócenie go w następnym kroku działa)

    $ 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. Służy setfacldo przywracania prawidłowych uprawnień z acl.txt:

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

Nazwa pliku jest pobierana z # file:komentarza wygenerowanego przez getfacl, więc nie ma potrzeby określania go w wierszu poleceń.

Jeśli chcesz przywrócić te uprawnienia do innego pliku, możesz użyć --set-filezamiast --restoretego:

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

Przykład

Jeśli ostatecznie nadpisujesz uprawnienia do niektórych plików /usr, ale nie wiesz, które pliki zostały nadpisane, zwykle możesz to naprawić, przywracając z innego podobnie skonfigurowanego systemu.

  1. Uprawnienia do tworzenia kopii zapasowych z działającego systemu (uwaga: getfaclgeneruje ścieżki względne, więc upewnij się, że cddo spójnej lokalizacji na obu komputerach)

    # cd /
    # getfacl -R usr > /root/acls.txt
    
  2. Skopiuj zrzut ACL do systemu z uszkodzonymi uprawnieniami

    $ scp root@working-system:/root/acls.txt .
    $ scp acls.txt root@broken-system:/root/
    
  3. Przywróć zrzut ACL, aby zastąpić zepsute uprawnienia uprawnieniami ze znanego dobrego komputera

    # cd /
    # setfacl --restore /root/acls.txt
    
Score_Under
źródło