To jest kanoniczne pytanie dotyczące uprawnień do plików i dlaczego 777 jest „destrukcyjny”.
Nie pytam, jak rozwiązać ten problem, ponieważ istnieje mnóstwo odniesień do tego już w usłudze Server Fault (reinstalacja systemu operacyjnego). Dlaczego w ogóle robi coś destrukcyjnego?
Jeśli kiedykolwiek użyłeś tego polecenia, prawie natychmiast zniszczyłeś swój system operacyjny. Nie jestem pewien, dlaczego usunięcie ograniczeń ma jakikolwiek wpływ na istniejące procesy. Na przykład, jeśli nie mam dostępu do odczytu i po krótkim błędzie w terminalu nagle mam teraz dostęp dobrze ... dlaczego to powoduje uszkodzenie Linuksa?
linux
permissions
chmod
samwise
źródło
źródło
Odpowiedzi:
Przede wszystkim drobna terminologia nitpick:
chmod
nie usuwa uprawnień. To ZMIANY im.Teraz sedno problemu - tryb
777
oznacza „Każdy może czytać, pisać lub uruchamiać ten plik” - Zezwoliłeś każdemu na (efektywne) wykonywanie, co tylko zechce.Dlaczego to takie złe?
login
program, który pozwala im za każdym razem).rm -r /
i to wszystko. OS został poinformowany, aby pozwolił im robić, co chcieli!sudo
,sendmail
i wiele innych po prostu nie będzie już działać. Zbadają kluczowe uprawnienia do plików, zobaczą, że nie są tym, czym powinny być, i wykopią komunikat o błędzie.Podobnie
ssh
psuje się okropnie (pliki kluczy muszą mieć określone uprawnienia, w przeciwnym razie są „niepewne” i domyślnie SSH odmówi ich użycia).Ten tryb
777
jest w rzeczywistości . Wśród elementów tej wiodącej cyfry są cyfry i . Większość programów, które są setuid / setgid, mają ustawiony ten bit, ponieważ muszą działać z pewnymi uprawnieniami. Teraz są zepsute.0
777
setuid
setgid
/tmp
i/var/tmp
Inna sprawa, w tym wiodących ósemkowej cyfry, które dostał zero'd jeststicky bit
- To, co chroni pliki w/tmp
(i/var/tmp
) przed usunięciem przez osoby, które nie są ich właścicielami.Istnieje (niestety) wiele źle zachowujących się skryptów, które „czyszczą”, wykonując
rm -r /tmp/*
i bez ustawionego bitu/tmp
, możesz pocałować wszystkie pliki w tym katalogu na pożegnanie.Zniknięcie plików scratch może naprawdę zdenerwować niektóre źle napisane programy ...
/dev
/proc
i podobne systemy plikówJest to większy problem na starszych systemach Unix, gdzie
/dev
jest prawdziwy system plików, a zawarte w nim elementy to specjalne pliki utworzone za pomocąmknod
, ponieważ zmiana uprawnień zostanie zachowana podczas ponownego uruchamiania, ale w dowolnym systemie zmiana uprawnień urządzenia może powodować poważne problemy, od oczywistych zagrożeń bezpieczeństwa (każdy może odczytać każdy TTY) do mniej oczywistych potencjalnych przyczyn paniki jądra.Credit to @Tonny for pointing out this possibility
Credit to @Tonny for pointing out this possibility
. Wiele osób ma
.
w swojejPATH
zmiennej środowiskowej (nie powinieneś!) - Może to spowodować nieprzyjemną niespodziankę, ponieważ teraz każdy może upuścić plik o dogodnej nazwie jak polecenie (powiedzmake
lubls
i spróbuj nakłonić Cię do uruchomienia złośliwego kodu.Credit to @RichHomolka for pointing out this possibility
chmod
zresetuje listy kontroli dostępu (ACL).Oznacza to, że możesz skończyć z koniecznością ponownego utworzenia wszystkich list ACL oprócz ustalania uprawnień wszędzie (i jest to rzeczywisty przykład polecenia niszczącego).
Credit to @JamesYoungman for pointing out this possibility
Czy działające już części systemu będą nadal działać? Prawdopodobnie przynajmniej przez jakiś czas.
Ale następnym razem, gdy będziesz musiał uruchomić program, zrestartować usługę lub zabraniać nieba, ponownie uruchom skrzynkę, w której czeka cię świat bólu, ponieważ punkty 2 i 3 powyżej odwrócą swoje brzydkie głowy.
źródło
/tmp
zostanie naprawiony po ponownym uruchomieniu. Chociaż wszystko inne wydaje się być zepsute. Przynajmniej na maszynie wirtualnej, którą właśnie przetestowałem, wydaje się, że ponowne uruchomienie naprawiło/tmp
uprawnienia. Gdzieś musi być coś w skrypcie startowym.tmpfs
zwykle same się naprawiają, te, które mają / tmp na dysku mogą (w zależności od ich skryptów startowych)find / -perms -4000 -type f
ifind / -perms -2000 -type f
zobaczyć różne pliki binarne, które opierają się na tych flagach.everyone
jest zdefiniowana jako związek zestawie tym użytkownika, który jest właścicielem pliku, użytkownicy w grupie, która jest właścicielem pliku, a użytkownicy, którzy nie spełniają żadnego z tych kryteriów (dosłownie trzy cyfry ósemkowe uprawnień:User
,Group
, iOther
). Innymi słowy, każdy użytkownik mający dostęp do systemu . („Dostęp” w tym kontekście może być kontem powłoki, tak jak normalnie bym to rozwiązał, ale obejmuje również dostęp przez formularz internetowy / CGI, który zapisuje dane na dysk:www
Użytkownik może teraz zapisywać do dowolnego pliku w systemie , co oznacza, że również przypadkowi użytkownicy).Jedną z głównych rzeczy jest to, że istnieje wiele narzędzi, takich jak ssh / sudo, które sprawdzają uprawnienia systemu plików dla kluczowych plików konfiguracyjnych. Jeśli uprawnienia są nieprawidłowe, narzędzia te ulegają awarii, ponieważ oznaczałoby to poważny problem z bezpieczeństwem. W moim systemie testowym Debiana i być może w innych, możliwość logowania się nie udaje, prawdopodobnie dlatego, że binarny login lub coś w PAM ma sprawdzanie uprawnień.
Tak naprawdę nie jest tak, że system jest zniszczony - chodzi o to, że wiele narzędzi zaprojektowano tak, aby natychmiast ulegały awarii, gdy uprawnienia są błędne.
Jeśli zrestartujesz system po
chmod 777 -R /
jego uruchomieniu, uruchomi się i możesz uruchomić procesy, które nie mają wyraźnych kontroli uprawnień. Tak więc system nie jest tak naprawdę martwy, a jedynie nieco bezużyteczny według projektu .źródło