Dlaczego mogłem usunąć plik należący do roota w moim katalogu domowym bez rootowania?

40

Więc dzisiaj przeprowadzałem trochę konserwacji na swoim serwerze i zauważyłem, że mogę usunąć plik należący do roota w moim katalogu domowym.

Udało mi się odtworzyć próbkę:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

Moje pytanie brzmi: w jaki sposób mogłem usunąć plik, który jest własnością roota i ma uprawnienia -rw-r--r--, skoro nie jestem rootem?

Carl Bennett
źródło
6
Możesz usunąć wpis w katalogu wskazujący na plik, ponieważ masz dostęp do zapisu do katalogu. Nie zawsze możesz usunąć plik; plik może mieć inne twarde łącze gdzie indziej.
user253751,
2
Zabawne rozszerzenie: możesz także zmienić nazwę pliku lub utworzyć twarde linki.
Peter mówi, że przywróć Monikę
11
Proszę ponownie rozważyć swój wybór pod kątem zaakceptowanej odpowiedzi, ponieważ obecna jest wręcz myląca: nie wolno ci nic robić w jej treści na podstawie uprawnień katalogu .
Cthulhu,
@Cthulhu Gotowe! Dziękujemy wszystkim za wszystkie komentarze do tego pytania i odpowiedzi, zdecydowanie wiele przydatnych informacji tutaj!
Carl Bennett,

Odpowiedzi:

34

Uprawnienia, treść i wszystkie atrybuty są częścią i-węzła. Nazwa znajduje się we wpisie katalogu. Uprawnienia nie są dziedziczone rekurencyjnie (z wyjątkiem sytuacji, gdy używasz wartości domyślnych w listach ACL Posix).

Podczas usuwania pliku wewnętrznie usuwasz tylko twardy link z pozycji katalogu do i-węzła. Gdy wszystkie dowiązania twarde zostaną usunięte, a i-węzeł nie będzie używany, system plików odzyska miejsce. Potrzebujesz tylko uprawnienia do zapisu w folderze, bez względu na to, jakie uprawnienia są ustawione w pliku (z wyjątkiem niezmiennego zezwolenia na rozszerzenie). To samo dla pustego folderu.

Kiedy usuwasz folder, który nie jest pusty, potrzebujesz uprawnień do zapisu w usuwanym folderze i jego rodzicu.

Mircea Vutcovici
źródło
1
Więc uprawnienia są na i-węzle lub uprawnienia są na łączu do i-węzła, a ja po prostu usuwam ten link (a zatem jedyny link do niego jest usuwany, więc i-węzeł przestaje istnieć)?
Carl Bennett,
3
Uprawnienia są w i-węzle. Można to łatwo zweryfikować, tworząc twardy link do pliku, zmieniając uprawnienia do tego, a następnie sprawdzając uprawnienia do oryginału.
Wouter Verhelst,
ale powiedzmy, że jest w nim katalog i plik należący do katalogu głównego, przy czym katalog znajduje się w katalogu należącym do użytkownika. Nie byłbyś wtedy w stanie ich usunąć, prawda?
njzk2
1
Jest to atrybut specyficzny dla ext2, ext3 i ext4. Przykład: sudo touch test_file;sudo chattr +i test_file;rm -f test_filePatrz:man chattr
Mircea Vutcovici
1
Niezmienny atrybut chroni plik przed wszelkimi zmianami nawet przed rootem.
Mircea Vutcovici,
19

Gdy jesteś właścicielem katalogu, możesz zrobić z nim wszystko, a zawartość w nim oparta na uprawnieniach do katalogu. Dlatego, mimo że nie jesteś właścicielem pliku, nadal możesz go usunąć, ponieważ masz uprawnienia do odczytu / zapisu do katalogu, w którym plik się znajduje.

inetknght
źródło
46
Nie dokładnie. Na przykład OP nie byłby w stanie zmodyfikować tego pliku należącego do roota. Chodzi o to, że usunięcie pliku nie jest traktowane jako operacja na pliku, ale raczej na katalogu (usunięcie wskaźnika do pliku) i dlatego uprawnienia do katalogu miały znaczenie.
Cthulhu,
1
@Cthulhu, więc czy możesz usunąć plik będący własnością root i utworzyć nowy zmodyfikowany plik o tej samej nazwie po?
KDEx,
3
@Morgoroth tak, mógłbyś, ale to nie byłby już ten sam plik. W innym (być może bardziej oczywistym) przykładzie nie byłbyś w stanie odczytać pliku w katalogu, gdyby należał do katalogu głównego i tylko jego właściciel mógł go odczytać.
Cthulhu,
@inetknght Należy to wyjaśnić. Rozumiem, że próbujesz odnieść się do manipulowania plikami jako jednostkami, ale nie jest to jasne. Nie możesz na przykład modyfikować jego zawartości. I nie wspominasz o atrybutach, które mogą prześcignąć uprawnienia do katalogu.
Mike S
1
@captcha Jest tak, ponieważ vinajpierw zapisuje plik w kopii tymczasowej, a następnie usuwa oryginalny plik i zmienia nazwę kopii na oryginał (lub coś w tym rodzaju).
Cthulhu