Dlaczego w ogóle potrzebujemy fakeroot
dowodzenia? Czy nie możemy po prostu użyć poleceń sudo
lub su
?
Strona podręcznika mówi:
fakeroot - uruchom w środowisku fałszywe uprawnienia roota do manipulowania plikami
About.com mówi:
Daje fałszywe środowisko root. Ten pakiet ma na celu włączenie czegoś takiego:
dpkg-buildpackage -rfakeroot
np. Usunięcie potrzeby rootowania dla kompilacji pakietu. Odbywa się to poprzez ustawienieLD_PRELOAD
sięlibfakeroot.so
, która zapewnia otoki wokółgetuid
,chown
,chmod
,mknod
,stat
, ..., tworząc w ten sposób fałszywy środowiska korzeniowego. Jeśli nic nie rozumiesz, nie potrzebujeszfakeroot
!
Moje pytanie brzmi: jaki specjalny cel rozwiązuje to proste, su
czy sudo
nie? Na przykład w celu przepakowania wszystkich zainstalowanych pakietów w Ubuntu wydajemy następujące polecenie:
$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1`
Czy możemy wykonać powyższe polecenie za pomocą sudo lub su zamiast fakeroot w następujący sposób:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
EDYTOWAĆ:
Bieganie:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
daje mi ten błąd:
katalog sterujący ma złe uprawnienia 700 (musi być> = 0755 i <= 0775)
Jakiś powód dlaczego?
sudo
lubsu
ponieważ jest to twój komputer.fakeroot
ma dwa zastosowania 1) oszuka programy, które uważają, że rzeczywiście jesteś użytkownikiem root, czego może wymagać niektóre źle napisane oprogramowanie prawnie zastrzeżone, nawet jeśli nie jest potrzebne (zwykle deweloper Windows nie ma Linuksa) oraz 2) pozwala na emulację zmian trybu plików i własności, których nie w przeciwnym razie można to zrobić, głównie w celu utworzeniatar
pliku z prawidłowymi uprawnieniami i prawem własności, przydatnego na przykład podczas pakowania oprogramowania.fakeroot
! Jeśli nie możesz wymyślić sytuacji, w którejfakeroot
jest to przydatne, to dosłownie nie potrzebujesz go. Ale ludzie, którzy faktycznie tego potrzebują, całkowicie rozumieją przypadek użycia.Odpowiedzi:
Wyobraź sobie, że jesteś programistą / opiekunem pakietów itp. Pracującym na zdalnym serwerze. Chcesz zaktualizować zawartość pakietu i odbudować go, pobrać i dostosować jądro z kernel.org i zbudować go itp. Próbując to zrobić, przekonasz się, że niektóre kroki wymagają posiadania
root
uprawnień (UID
iGID
0) z różnych powodów (bezpieczeństwo, przeoczone uprawnienia itp.). Nie można jednak uzyskaćroot
uprawnień, ponieważ pracujesz na zdalnym komputerze (a wielu innych użytkowników ma taki sam problem jak Ty). Właśnie tofakeroot
robi: udaje, że jest skutecznyUID
i równyGID
0 środowisku, które tego wymaga.W praktyce nie można uzyskać rzeczywiste
root
przywileje (w przeciwieństwie dosu
isudo
że wspominając).źródło
fakeroot
zmienić ustawień systemowych? bo polecenie, które będziemy wykonywać, będzie myślało, że działa jako root i robi wszystko, co chcemy. prawda?Aby wyraźnie zobaczyć różnicę między fakeroot a prawdziwym sudo / su, po prostu wykonaj:
Tak długo, jak jesteś w powłoce fakeroot, wygląda na to, że jesteś rootem - o ile nie próbujesz robić niczego, co naprawdę wymaga uprawnień roota. I właśnie tego potrzebuje narzędzie do tworzenia opakowań, które będzie miało sens na każdej maszynie.
W rzeczywistości, gdy używasz fakeroot do pakowania, to chcesz, aby narzędzia działające pod fakeroot były widoczne dla twoich plików jako root. Nic dodać nic ująć. Tak więc w rzeczywistości su lub sudo nie będą działać, aby uzyskać odpowiednią własność pliku.
źródło
.deb
plik, wszystkie moje/usr
pliki są własnością każdego, kto zadzwoniłfakeroot
?fakeroot
powłoki wyglądają tak , jak są. Gdy pakiet .deb jest tworzony w tej powłoce, właściciel pliku jest odczytywany z systemu plików (któryfakeroot
przechwytuje i zwracaroot
) i jest przechowywany w pakiecie. Podczas instalowania pakietu dpkg wymaga dostępu do konta root, ponieważ pakiet wskazuje, że plik powinien być własnością root.Ponieważ odpowiedzi są trudne do zrozumienia (dla siebie) i zastanowienie się nad tym zajęło trochę czasu ( ten komentarz sprawił, że zrozumiałem), mam nadzieję, że wyjaśnię to lepiej.
1. Co dzieje się w Fakeroot
Nic więcej niż to, co dzieje się z własnym użytkownikiem. Absolutnie nic więcej. Jeśli ty
fakeroot
(który po wywołaniu daje ci nową powłokę, tak jaksudo
zrobiłbyś), udajesz, że robisz rzeczy, na które potrzebujesz pozwolenia, i wychodzisz, absolutnie nic by się nie wydarzyło.Jeśli się nad tym zastanowić, to całkowita strata czasu. Dlaczego miałbyś robić rzeczy, które tak naprawdę by się nie wydarzyły? To niesamowite. Mógłbyś po prostu tego nie zrobić i nie byłoby różnicy, ponieważ nie ma na to śladu.
Poczekaj minutę...
2. Ślad fakeroot
Nie mogło być śladu lewej
fakeroot
. Spójrzmy na polecenia w odpowiedzi MortenSickel, która jest całkiem ładna i zasługuje na głosowanie:Na pierwszy rzut oka wygląda na to, że korzystanie z niego
fakeroot
było całkowitą stratą czasu. W końcu, gdybyś nie używałfakeroot
, miałbyś to samo.Subtelna rzecz jest tutaj:
Co oznacza, że zawartość pliku nadal pamięta, że jest rootem. Można powiedzieć, że nieużywanie
fakeroot
przyniosłoby takie same wyniki. Masz rację, ten przykład jest zbyt prosty.Weźmy inny przykład:
Zobaczmy co się stało. Udawałem, że jestem
root
, co jest całkowicie nieskuteczne, i stworzyłemx
iy
. Udawałem,x
że należęmyuser
iy
należęroot
. Oba należą domyuser
(jak widzimy na końcu), ale udawałem, że tak właśnie jest.Następnie stworzyłem listę i zapisałem moją wyobraźnię w pliku. Później, gdy patrzę wstecz na plik, widzę, kto według mnie powinien być właścicielem plików. Znów nie są własnością ludzi, których sobie wyobrażałem, po prostu sobie to wyobraziłem.
3. Więc ... Dlaczego tego chcesz ponownie?
Możesz powiedzieć, że tak naprawdę nie musiałem udawać, że jesteś rootem, aby utworzyć tę listę. Mogłem po prostu utworzyć listę, a następnie edytować ją, aby odzwierciedlić moją wyobraźnię. Masz rację, nie potrzebujesz
fakeroot
tego. W rzeczywistości, wiedząc, żefakeroot
tak naprawdę nic nie robi, nie możesz zdobyć żadnej zdolności, której wcześniej nie miałeś.Ale i o to w tym
fakeroot
wszystkim chodzi, edycja listy może nie być łatwa. Podobnie jak w przypadku pakietu, który można zainstalować w systemie, masztar
ed,gzip
ed,xz
ed,bzip2
ed lub inny format, który utrzymuje pliki razem i zapamiętuje ich uprawnienia i właścicieli. Czy możesz łatwo zmodyfikować skompresowany plik i edytować własność pliku? Nie wiem o tobie, ale nie mogę wymyślić sposobu.Czy może istnieć narzędzie, które po skompresowaniu wszystkiego modyfikuje skompresowany plik i programowo edytuje prawa własności i uprawnienia? Tak, może. Możesz więc sfałszować własność przed kompresją lub zmienić ją później. Ludzie Debiana uznali, że to pierwsze jest łatwiejsze.
4. Dlaczego nie po prostu użyć
sudo
?Przede wszystkim nie potrzebujesz uprawnień roota do tworzenia oprogramowania i nie potrzebujesz uprawnień roota do ich kompresji. Więc jeśli go nie potrzebujesz, naprawdę musisz być użytkownikiem systemu Windows, aby nawet pomyśleć o uzyskaniu tego pozwolenia. Pomijając sarkazm, możesz nawet nie mieć hasła roota.
Poza tym powiedzmy, że masz uprawnienia roota. Powiedzmy, że chcesz udawać, że plik powinien mieć dostęp tylko do odczytu do katalogu głównego. Więc
sudo
właściwie zmieniasz właściciela pliku i uprawnieniaroot
, wychodzisz z powłoki roota i próbujesz spakować wszystko. Niepowodzenie, ponieważ teraz nie możesz już odczytać pliku, ponieważ nie masz dostępu do konta root. Musisz więcsudo
skompresować i zbudować pakiet jako root. W efekcie musisz zrobić wszystko jako root.To jest Zła TM .
Jako program pakujący nie potrzebujesz uprawnień roota i nie powinieneś go otrzymywać. Podczas instalowania pakietu może być konieczne zainstalowanie pliku file (
A
) jako root i tam potrzebujesz uprawnień roota. Wszystko pofakeroot
to, aby było to możliwe. Pozwala to liście programów pakującychA
jako posiadanej przez root dla archiwizatora, tak że gdy użytkownik dekompresuje pakiet, archiwizator wymaga uprawnień roota i tworzyA
jako root.źródło
So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier.
Pomogło mi to, gdy ciągle myślałem „dlaczego nie zmodyfikować go później?”.AFAIK, fakeroot uruchamia polecenie w środowisku, w którym wydaje się, że ma uprawnienia administratora do manipulowania plikami. Jest to przydatne, aby umożliwić użytkownikom tworzenie archiwów (tar, ar, .deb itp.) Z plikami w nich z uprawnieniami / prawami roota. Bez fakeroot należałoby mieć uprawnienia roota, aby tworzyć pliki składowe archiwów z odpowiednimi uprawnieniami i prawem własności, a następnie spakować je, lub trzeba byłoby tworzyć archiwa bezpośrednio, bez użycia archiwizatora.
fakeroot działa poprzez zastąpienie funkcji biblioteki manipulacji plikami (chmod (), stat () itd.) tymi, które symulują efekt, jaki miałyby rzeczywiste funkcje biblioteki, gdyby użytkownik był naprawdę rootem.
Streszczenie:
Sprawdź więcej tutaj: fakeroot
źródło
the program running in it thinks it has root privileges
programem a uprawnieniami do rootowania? Jeśli mogę to zrobić,rm -rf /
a uruchomienie programu uważa, że mam uprawnienia roota ...rm
sprawdzenie, czy masz wystarczające uprawnienia, ale samo jądro nie pozwoli ci tego zrobić;unlink
wywołanie systemowe zawiedzie. Obsługa aplikacji nie zależy od samej aplikacji, inaczej możesz napisać własną aplikację, która nie sprawdza uprawnień i robi z nią, co chceszUżyłem go do skryptów budujących pakiety. Nie byłem pewien, czy osoba uruchamiająca skrypt ma dostęp na poziomie administratora, ale skrypt nadal musiał wygenerować, powiedzmy, plik tar, który zawierał pliki należące do roota. Najprostszym sposobem na to było uruchomienie skryptu budowania pakietów pod fakeroot, co skłoniło archiwizatora do przekonania, że pliki należą do roota i jako takie spakowały je w archiwum. W ten sposób, gdy pakiet został rozpakowany na maszynie docelowej (na innym komputerze), pliki nie należały do dziwnych lub nieistniejących użytkowników.
Myśląc o tym, jedynym miejscem, które widziałem, było zbudowanie jakiegoś archiwum: rootfów systemów wbudowanych, archiwów tar.gz, pakietów rpm, pakietów .deb itp.
źródło
fakeroot
jest narzędziem obejścia dla błędnego oprogramowania do pakowania: nie ma powodu, aby być rootem, aby tworzyć takie pakiety, ale ponieważ nie pozwalają one określić uprawnień do plików w inny sposób niż ustawienie ich bezpośrednio w systemie plików, zanim nie masz wybórJednym z typowych zastosowań jest ustalenie, do jakich plików naprawdę chciałby się dostać uszkodzony plik binarny. Oznacza to znalezienie i naprawienie lub obejście błędów spowodowanych przez mocno zakodowane ścieżki i niewłaściwą obsługę wyjątków.
źródło
Możesz użyć fakeroot bez faktycznych uprawnień roota. Gdybyś miał
su
i / lub byłbyś wsudo
stanie zniszczyć swój system za pomocą prostegorm -rf /
, ale za pomocą fakeroot najwyżej usunąłbyś swój katalog domowy.źródło
fakeroot
. Możesz usunąć swój katalog domowy jak sam.Prosta odpowiedź:
su i sudo uruchamiają polecenia jako root. fakeroot nie, poza częściowym ustawieniem piaskownicy.
źródło