Dlaczego użytkownik inny niż root może usuwać pliki utworzone przez root?

24

Biorąc pod uwagę użytkownika innego niż root „joshua”, jako root utworzyłem plik o nazwie „foo” w katalogu domowym joshua (/ home / johsua /); wygląda to tak:

-rw-r--r--  1 root   root       0 12-19 21:00 foo

a następnie usunąć jako Joshua, mogę go pomyślnie usunąć.

Spodziewałbym się, że Joshua nie ma wystarczających uprawnień, aby go usunąć. Czy jest to pewnego rodzaju „dziedziczenie uprawnień”? Moja platforma to Debian 5.0.7.

Jozuego
źródło
1) To nie jest temat. 2) Bardzo wątpię, czy udało ci się usunąć to jako użytkownik inny niż root bez sudoeskalacji uprawnień lub innej. Prawdopodobnie coś przeoczyłeś.
DarkDust,
16
@DarkDust Plik to pozycja w jego katalogu nadrzędnym. Jeśli masz uprawnienia do zapisu w katalogu, możesz usunąć z niego pliki bez względu na to, kto jest właścicielem plików (chyba, że ​​lepki bit jest również ustawiony w katalogu)
nr
@ nos: Silly me, masz rację.
DarkDust,
1
Wpis w jego katalogu nadrzędnym jest odniesieniem do pliku. To nie jest sam plik. (W przeciwnym razie, w jaki sposób plik może zostać na stałe połączony z więcej niż jednym katalogiem?)
David Schwartz
@DavidSchwartz to prawda, ale usunięcie pliku z katalogu polega na usunięciu odwołania w strukturze katalogów.
mc0e

Odpowiedzi:

43

Użytkownik nie usunął pliku, system to zrobił. Użytkownik po prostu usunął plik ze swojego katalogu. System usunął plik, ponieważ jego liczba odwołań spadła do zera. Zdarza się, że użytkownik usuwający plik z katalogu spadł do zera. (Jeśli plik został na stałe połączony z innym katalogiem lub do pliku został otwarty uchwyt, nie zostałby usunięty).

System automatycznie usuwa pliki, gdy ich liczba odniesień spadnie do zera. Właściciel pliku nie ma znaczenia. Istnieje wiele sposobów, aby ktoś inny niż właściciel pliku mógł zrzucić liczbę referencji pliku do zera.

Usunięcie pliku z katalogu (zwanego „odłączeniem”) to operacja na katalogu. Odłączenie pliku zmniejsza liczbę odwołań.

Podobnie użytkownik inny niż właściciel może zamknąć ostatni uchwyt pliku, który nie jest powiązany z żadnym katalogiem. Zamknięcie tego uchwytu spowoduje również usunięcie pliku, ponieważ ponownie liczba referencji spadnie do zera.

David Schwartz
źródło
1
I oczywiście rmpolecenie nieco zamazuje wody, ponieważ rmjest skrótem „usuń”, a użytkownicy są szkoleni, aby myśleć o rmoperacji „usuń”. Wielu użytkowników korzysta rmcodziennie, nie będąc świadomym, że operacja, którą faktycznie wykonuje, to „odłącz”, a nie „usuń”. W rezultacie nie powinno dziwić, że wielu użytkowników uważa to zachowanie za zaskakujące, gdy po raz pierwszy je napotyka.
Daniel Pryden,
To zdecydowanie zaskakuje wielu ludzi. Przynajmniej rmpolecenie faktycznie usuwa plik lub katalog z katalogu. Gorzej jest w systemie Windows, w którym wywoływane jest to polecenie del, ponieważ służyło ono do usuwania pliku, ale na nowoczesnych komputerach z systemem Windows (od NT4) jest to również operacja rozłączania.
David Schwartz,
„Użytkownik nie usunął pliku, system to zrobił” To nie ma sensu. „System” nie może dokonywać zmian wymagających uprzywilejowanego dostępu w imieniu nieuprzywilejowanego użytkownika. W związku z tym ta odpowiedź nie wyjaśni, dlaczego ten sam użytkownik nie może zrobić tego samego, jeśli bieżący katalog był własnością + możliwość zapisu tylko przez użytkownika root. Odpowiedź poniżej @kerrek jest dokładna i zwięzła.
FractalSpace
@FractalSpace Huh? System może dokonywać zmian, które wymagają uprzywilejowanego dostępu w imieniu nieuprzywilejowanego użytkownika i robi to przez cały czas. Na przykład zmiana bajtów na dysku wymaga uprzywilejowanego dostępu. Jeśli jednak użytkownik może zmodyfikować plik, system zdecyduje się zmodyfikować niektóre bajty na dysku, nawet jeśli użytkownik nie ma uprawnień do samodzielnego modyfikowania tych bajtów. Użytkownik nie może modyfikować pamięci jądra, ale jądro może to zrobić podczas wykonywania w imieniu użytkownika. Systemy działają, decydując się na wykonywanie operacji, których użytkownicy nie mogą bezpośrednio autoryzować.
David Schwartz
Tak. I ostatecznie wszystko jest wykonywane przez „system”. Ale nie przed przejściem przez ścisłe reguły rozdziału uprawnień ustalone dla tej „przestrzeni użytkownika”. W tym scenariuszu, np. „System” nie wykonuje akcji z reguły, ale przestrzega uprawnień ustawionych w „katalogu nadrzędnym”. Kluczowa część tego problemu w pytaniu PO.
FractalSpace
0

Pierwsze zgadnięcie: do usunięcia pliku potrzebne są uprawnienia do zapisu w folderze zawierającym. Więc spróbuj / home / johsua / foo / bar, daj 755 na foo i 644 na bar.

Eugen Rieck
źródło