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ą chown
udane. 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ż fakeroot
nie 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ę:
- Utwórz niektóre pliki, przenieś je, zmień ich własność i tryby itp.
- 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
tar --owner=root --group=root cfpJ files.tar.xz files/
daje mi błądtar: You must specify one of the
-Acdtrux 'lub--test-label' options Try
tar --help' lubtar --usage' for more information.