Czy tar zachowuje uprawnienia, jeśli zmienią się identyfikatory użytkowników?

20

Muszę wykonać kopię zapasową niektórych danych za pomocą opcji „p” w poleceniu tar. Problemem jest to, że miejsce, w którym przywrócę te dane, będzie miało tych samych użytkowników, ale ci użytkownicy mogą mieć różne identyfikatory. Czy ma to jakikolwiek wpływ na tar, czy będzie poprawnie przywracać uprawnienia według nazwy użytkownika?

Marius
źródło

Odpowiedzi:

9

tarrejestruje uprawnienia na podstawie identyfikatora UID i GID, a nie na powiązanym z nimi ciągu. Jeśli więc identyfikator UID na jednym serwerze wynosił 3300 i był on powiązany z „bob”, na nowym serwerze plik będzie własnością użytkownika, który ma UID 3300.

Wirtualne wszystko (chcę powiedzieć wszystko, ale nigdy nie możesz być w 100% pewien) w systemie UNIX używa wartości UID: GID, ponieważ tak właśnie jest przechowywane na poziomie systemu plików. Nazwa jest po prostu prostym wyszukiwaniem w pliku passwd, podstawowe kontrole są wykonywane przy użyciu wartości liczbowych.

EightBitTony
źródło
Ach, to nie jest dobre ... Myślę, że w większości sytuacji jest odpowiednie. Niestety nie dla mnie ... Dziękuję, EightBitTony.
Marius
3
Najprawdopodobniej masz na myśli GID (identyfikator grupy), a nie GUID (globalnie unikalny identyfikator).
CVn
6
GNU tar również zapisuje dane nazwy użytkownika / grupy, ponieważ widzę je, jeśli wymienię archiwum na komputerze, który nie ma tych użytkowników. Musi istnieć sposób, aby użyć go podczas ekstrakcji.
Rob H
3
Ta odpowiedź jest po prostu niepoprawna. tar robi rekordowe nazwiska właściciela.
Steffen Heil
55

Podsumowując poprzednie odpowiedzi i dodając kilka ważnych informacji:

  • Podczas tworzenia archiwów, tarzawsze będzie chronić użytkownika i identyfikator grupy Files', chyba, że powiedziano inaczej z --owner=NAME, --group=NAME. Ale nadal będzie zawsze użytkownik i grupa skojarzona z każdym plikiem.

  • GNU tar, a może inne wersje tar, także przechowywać użytkowników i grup nazw , chyba że --numeric-ownerjest używany. bsdtar domyślnie przechowuje również nazwy użytkowników i grup, ale obsługa --numeric-owneropcji podczas tworzenia pojawiła się dopiero w bsdtar 3.0 (zauważ, że bsdtar wspierał opcję podczas wypakowywania znacznie dłużej).

  • Podczas rozpakowywania jako zwykły użytkownik , wszystkie pliki będą zawsze własnością użytkownika. I nie może być inaczej, ponieważ wypakowanie pliku powoduje utworzenie nowego pliku w systemie plików, a zwykły użytkownik nie może utworzyć pliku i przekazać własności innej osobie.

  • Podczas rozpakowywania jako root , tardomyślnie przywróci własność wyodrębnionych plików, chyba że --no-same-owner zostanie użyte, co da prawo do rootowania samego siebie.

  • W GNU tar, bsdtar i być może w innych wersjach tarprzywrócona własność jest wykonywana przez nazwę użytkownika (i grupy) , jeśli ta informacja znajduje się w archiwum, a w systemie docelowym znajduje się pasujący użytkownik. W przeciwnym razie przywraca według ID. Jeśli --numeric-owneropcja jest podana, nazwy użytkowników i grup są ignorowane.

  • Uprawnienia i znaczniki czasu są również zapisywane w archiwum i domyślnie przywracane, chyba że zostaną użyte opcje --no-same-permissionsi / lub --touch. Po wyodrębnieniu przez użytkownika użytkownik umaskjest odejmowany od uprawnień, chyba że --same-permissionszostanie użyty.

  • --preserve-permissionsi --same-permissionssą aliasami i mają taką samą funkcjonalność jak-p

Mam nadzieję, że pomoże to wyjaśnić problem! :)

MestreLion
źródło
3
Doskonała odpowiedź; Odpowiada na to pytanie, a także na każde inne pytanie, które może pojawić się na ten temat.
user1107893,
Należy zauważyć, że tylko najnowsze wersje GNU tarpozwalają na określenie dowolnych nazw w --ownerlub --group, w przeszłości, tarza darmo wyszukiwały bieżącą maszynę /etc/passwdi odmawiały uruchomienia, jeśli nie było dopasowania.
Matteo Italia
Co się stanie, jeśli utworzysz archiwum o określonej nazwie, --ownerale również dodane do --numeric-ownerflagi? Jak tar radzi sobie z tymi konkurencyjnymi wymaganiami?
CMCDragonkai
@CMCDragonkai: --owneri --numeric-ownernie wykluczają się wzajemnie, i służą bardzo odrębnym celom: --owner=USERNAMEnadpisują pliki i właścicieli katalogów podczas archiwizacji plików, a --numeric-ownerpo prostu nie przechowują nazwy użytkownika, tylko jego numeryczny identyfikator.
MestreLion
4

Użyj opcji --same-owner dla GNU tar. Zobacz http://www.gnu.org/software/tar/manual/html_section/Attributes.html

Colin 't Hart
źródło
Jest to udokumentowane jako domyślne dla superużytkowników i wydaje się odpowiadać na pytanie PO inaczej niż zaakceptowana odpowiedź. (Link mówi, że kiedy GNU tar przywraca za pomocą --same-owner, najpierw szuka nazw w / etc / passwd.) Jedynym nierozstrzygniętym problemem jest to, czy wersja tar OP-a implementuje --same-owner.
Mike Sherrill „Cat Recall”
OP korzysta z niektórych dystrybucji Linuksa, więc jest lepsza niż nawet szansa na użycie tar GNU. Przechodzenie przez dokumentację jest możliwe, podczas gdy zaakceptowana odpowiedź wskazuje, że nie jest ...
Colin 't Hart
@Catcall - przepraszam, zaakceptowałem odpowiedź, nawet nie mogąc jej przetestować. Czasami po prostu ślepo ufam ludziom. Mimo to osoba, która odpowiedziała, miała trochę racji, ponieważ nie przywracałem przy pomocy „- właściciel-właściciel”, a następnie dodałeś do odpowiedzi. Szkoda, że ​​nie mogę zaakceptować obu. Używam ściśnięcia Debiana, który rzeczywiście obsługuje „- taki sam właściciel”. Dzięki za wskazówkę.
Marius
@Marius: Jestem pewien, że możesz zmienić zaakceptowaną odpowiedź, kiedy tylko chcesz. (Po prostu zaznaczę, że nie podałem żadnych odpowiedzi na to pytanie, tylko komentarze. Nie mam tu żadnego przedstawiciela.)
Mike Sherrill „Cat Recall”
4

Jeśli próbujesz przesłać pliki między dwoma systemami, rsync domyślnie ustawi uprawnienia według nazwy użytkownika zamiast identyfikatora użytkownika, patrząc na nazwy użytkowników na obu końcach. Tylko jeśli użytkownik nie istnieje w jednym z systemów, skopiuje go z identyfikatorem użytkownika, chyba że powiesz inaczej.

Dotacja
źródło
To nie odpowiada bezpośrednio na pytanie PO, ale każdy, kto zadaje pytanie PO, powinien się tego również nauczyć.
Mike Sherrill „Cat Recall”