Co faktycznie zachowuje flaga tar -p (zachowaj uprawnienia)?

22

Co tak -pnaprawdę zachowuje flaga podczas tworzenia i rozpakowywania tarballa? Czy to rwxuprawnienia, które zachowuje?

Kiedy utworzyłem plik htdocs/archiwalny należący do roota, rozpakowanie go na mój komputer lokalny zmieniło własność z root na mojego użytkownika.

nicoX
źródło
5
Może powinieneś spróbować wyodrębnić archiwum jako root. Nie można ustawić uprawnień dla innego użytkownika jako zwykłego użytkownika, więc myślę, że tarnie będzie w stanie tego zrobić. Powiedz mi, czy to zadziałało.
Louis Matthijssen
"maszyna lokalna"?
Wyjaśnij,
Powiedz nam także, jakich systemów plików używasz. Zarówno źródłowy, jak i docelowy.
terdon
Źródło: Red Hat Enterprise Linux Server release 6.5 (Santiago) Cel: Ubuntu 13.10 Oba używająGPT
nicoX
Uwaga dodatkowa: tarzachowuje uprawnienia. -pi --same-owner/ --no-same-owner(jak w odpowiedziach) to flagi ekstrakcyjne. Nie mają wpływu podczas archiwizacji
Fr0zenFyr

Odpowiedzi:

19

Własność i uprawnienia to dwie różne rzeczy. -pFlaga zachowuje uprawnienia . W systemach * nix zwykli użytkownicy nie mogą zmienić właściciela pliku na użytkownika, który nie jest sobą.

Jak wyjaśniono tutaj :

Tylko procesy o efektywnym identyfikatorze użytkownika równym identyfikatorowi użytkownika pliku lub z odpowiednimi uprawnieniami mogą zmienić własność pliku. Jeśli _POSIX_CHOWN_RESTRICTED obowiązuje dla ścieżki:

  • Zmiana ID użytkownika jest ograniczona do procesów z odpowiednimi uprawnieniami.

  • Zmiana identyfikatora grupy jest dozwolona dla procesu o efektywnym identyfikatorze użytkownika równym identyfikatorowi użytkownika pliku, ale bez odpowiednich uprawnień, tylko wtedy, gdy właściciel jest równy identyfikatorowi użytkownika pliku lub (uid_t) -1 i grupa jest równa albo do efektywnego identyfikatora grupy procesu wywołującego, albo do jednego z dodatkowych identyfikatorów grupy.

Uzasadnienie tego zostało dobrze wyjaśnione przez @Gilles w tej odpowiedzi na Unixa i Linuksa:

Powodem tego ograniczenia jest to, że przekazanie pliku innemu użytkownikowi może pozwolić na złe rzeczy w rzadkich, ale wciąż ważnych sytuacjach. Na przykład:

  • Jeśli system ma włączone przydziały dysku, Alice mogłaby utworzyć plik do zapisu w świecie w katalogu dostępnym tylko dla niej (aby nikt inny nie mógł uzyskać dostępu do tego katalogu do zapisu w świecie), a następnie uruchomić chown, aby plik ten był własnością innego użytkownika Billa . Plik byłby wtedy wliczany do limitu dysku Billa, nawet jeśli tylko Alice może go użyć.
  • Jeśli Alice oddaje plik Billowi, nie ma śladu, że Bill go nie utworzył. Może to stanowić problem, jeśli plik zawiera nielegalne lub w inny sposób naruszające dane dane.
  • Niektóre programy wymagają, aby ich plik wejściowy należał do konkretnego użytkownika w celu uwierzytelnienia żądania (na przykład plik zawiera instrukcje, które program wykona w imieniu tego użytkownika). Zwykle nie jest to bezpieczny projekt, ponieważ nawet jeśli Bill stworzył plik zawierający poprawne składniowo instrukcje, być może nie zamierzał ich wykonać w tym konkretnym czasie. Niemniej jednak pozwolenie Alicji na utworzenie pliku z dowolną zawartością i pobranie go jako danych wejściowych od Billa może tylko pogorszyć sytuację.

Tak więc, nawet jeśli użyjesz --same-ownerflagi tar , nadal będziesz musiał wyodrębnić pliki, rootaby zachować własność. Ta flaga jest domyślnie włączona root, więc chcesz:

sudo tar xpf foo.tgz
terdon
źródło
9

Ciekawe są jeszcze 2 opcje smoły:

--same-owner
       try extracting files with the same ownership as exists in the ar‐
       chive (default for superuser)

--no-same-owner
       extract files as yourself (**default for ordinary users**)

Drugi jest domyślny, więc możesz dodać, --same-owneraby zapisać użytkownika. Prawdopodobnie będziesz musiał to zrobić sudo.

Poza tym: to będzie działać tylko na systemach obsługujących POSIX. A systemy operacyjne inne niż Ubuntu mogą nie mieć tych 2 opcji (nie są standardowe).

Rinzwind
źródło
3
Nie --same-ownerbędą działać dla użytkowników innych niż root, nie będą mieli prawa do ustawiania własności nikomu oprócz siebie. To jest zdefiniowane przez POSIX .
terdon
4

Aby zachować właściciela, uruchom go jako root lub użyj flagi --same-owner obok flagi -p podczas wypakowywania.

NGRhodes
źródło
3
W każdym razie musi być uruchamiany jako root. Użytkownicy inni niż root nie mogą zmieniać prawa własności do plików na innych użytkowników.
terdon