zmodyfikuj własność pliku dla plików w archiwum tar

10

Pracuję jako użytkownik i chciałbym utworzyć archiwum tar, które po rozpakowaniu (przez roota) wyodrębnia swoje pliki z prawami roota (w przeciwnym razie root musiałby ręcznie zmienić własność każdego pliku, po wyodrębnieniu plików) do miejsca docelowego).

Znalazłem, fakerootco wydaje się dokładnie to robić. Ale nie jestem w stanie znaleźć składni, której muszę użyć do utworzenia mojego archiwum.

Jak mogę utworzyć archiwum tar.xz, aby pliki miały własność root po rozpakowaniu przez root?

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
użytkownik1968963
źródło

Odpowiedzi:

12

Jak mogę utworzyć archiwum tar.xz, aby pliki miały własność root po rozpakowaniu przez root?

To zależy od roota, który rozpakowuje:

tar --no-same-owner -xf ...

Jeśli chcesz, aby wszystkie były rootem, możesz użyć

tar --owner=root --group=root -cf ...
Złotowłosa
źródło
to nie działa dla mnie: tar --owner=root --group=root cfpJ files.tar.xz files/daje mi błąd tar: You must specify one of the -Acdtrux 'lub --test-label' options Try tar --help' lubtar --usage' for more information.
user1968963
Potrzebujesz -krótkiego ciągu opcji: tar --owner=root --group=root -cfpJ ...tzn . -cfpJNie cfpJ.
złotowłosa
tar --owner=root --group=root -cfpJ files.tar.xz files/daje mi kolejny błąd: tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errorsa ponadto tworzy plik o nazwie pJ.
user1968963,
3
W porządku. Zawsze umieszczam fna końcu (ponieważ ma to bardziej sensowny, intuicyjny) i niski, a oto dostaję taką samą awarię z -cfpJALE -cpJfdziała.
złotowłosa
@ user1968963: f powinien zawsze znajdować się tuż przed nazwą pliku, ponieważ oznacza to, że „kolejnym parametrem jest nazwa pliku”. Jeśli nie umieścisz go tuż przed nazwą pliku, tar pomyśli, że nazwa pliku to „”, a następnie spróbuje otworzyć plik „”, którego nie może stat (oczywiście).
Olivier Dulac,
8

Fakeroot

Narzędzie fakeroot lub nowsze narzędzie fakeroot-ng (ten sam cel, inna technika implementacji) uruchamia program i udaje, że program działa jako root i że wywołania systemowe są chownudane. Tylko program uważa, że ​​wywołania te się powiodły, nic nie jest odzwierciedlone w systemie plików (nie może być inaczej, ponieważ fakerootnie ma żadnych dodatkowych uprawnień). Jeśli jednak program zmieni własność pliku, a następnie podejmie pewne działania w oparciu o własność tego pliku, może to zmienić zachowanie programu.

Typowy sposób na uzyskanie użytecznej pracy z fakeroot poprzez uruchomienie środowiska fakeroot, w którym zdarzają się:

  1. Utwórz niektóre pliki, przenieś je, zmień ich własność i tryby itp.
  2. Utwórz archiwum tych plików.

Przykład:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

Musisz użyć pojedynczego wywołania fakeroot, ponieważ między wywołaniami nie ma pamięci.

Przestrzenie nazw systemu Linux

Dla kompletności wspomnę, że jeśli masz jądro Linuksa ≥3,8, to przestrzenie nazw są innym sposobem na stworzenie środowiska root- pretend . Wsparcie dla użytkowników nie jest jeszcze dostępne, więc nie będę wchodził bardziej szczegółowo.

Zamontuj archiwum

Innym sposobem rozwiązania problemu jest zamontowanie archiwum jako katalogu. Możesz użyć archivemount , który może modyfikować kilka formatów archiwów poprzez libarchive , w tym skompresowaną tar.

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
Gilles „SO- przestań być zły”
źródło
Niezła sztuczka archivemount, ale nadal wymaga podniesienia uprawnień, a nawet jeśli użytkownik należy do zaufanej grupy, której wolno montować i odmontowywać, proces kończy się niepowodzeniem chown, więc fakerootnależy użyć narzędzi innych firm, takich jak lub przestrzenie nazw , też.
Anton Samsonov