Czy można utworzyć plik, który ma pełne uprawnienia dla wszystkich, ale nie można go usunąć?

15

Najlepiej bez używania sudo?

Evan
źródło
2
Boże, root, czym jest różnica? ars.userfriendly.org/cartoons/?id=19981111 Praktycznie rzecz biorąc, plik, którego nawet root nie mógłby usunąć, byłby marzeniem autorów złośliwego oprogramowania.
Dan bawi się Firelight
Zgadzam się, że formatowanie @DanNeely Plus jest również formą usunięcia pliku;)
Rinzwind

Odpowiedzi:

3

Próbować:

chattr +i filename

W ten sposób plik będzie niemożliwy do usunięcia nawet przez rootużytkownika - należy zachować ostrożność.

Aditya
źródło
5
gdy touch test && chattr +i testto robi , generuje błąd; chattr: Operation not permitted while setting flags on test. Potrzebujesz sudotego. Ponadto: nadal można usunąć plik: sudo chattr -i test && rm testdziała.
Rinzwind
23

Nie, to nie jest możliwe. Usunięcie pliku przez zwykłych użytkowników jest niemożliwe.

  1. Musisz sudouniemożliwić użytkownikom usuwanie plików. Twój administrator będzie zawsze mógł usunąć plik.

  2. sudo chattr +i testmoże zapobiec usunięciu, ale wymaga sudo. Prosty sudo chattr -i testumożliwia usunięcie pliku. Nikt inny niż administrator nie może korzystać chattr.

I ... po prostu ponowne uruchomienie i przejście w tryb ratunkowy pozwoli tej osobie na usunięcie tego pliku. Byłoby to zagrożenie bezpieczeństwa, gdyby istniała metoda, która nigdy nie byłaby w stanie usunąć pliku.

Rinzwind
źródło
8

To trochę prymitywne, ale jest blisko - jeśli usuniesz dostęp do zapisu w katalogu, plików w nim nie będzie można usunąć. I nie wymaga, sudojeśli jesteś właścicielem:

=^_^= izkata@izein:~$ mkdir test
=^_^= izkata@izein:~$ touch test/delme
=^_^= izkata@izein:~$ chmod a-w test
=^_^= izkata@izein:~$ echo 'Hello' > test/delme 
=^_^= izkata@izein:~$ cat test/delme 
Hello
=^_^= izkata@izein:~$ rm test/delme 
rm: cannot remove `test/delme': Permission denied

Możesz więc ustawić uprawnienia do samego pliku, jak chcesz.

Ponadto, jak stwierdził @Rinzwind, jest na pewno wiele sposobów na obejście tego.

Izkata
źródło
To wygląda dokładnie tak, jak chciał PO. ( Nie jestem pewien, dlaczego tego chcieli). Użytkownicy mogą czytać, zmieniać i uruchamiać pliki, ale nie mogą ich odłączyć (usunąć).
Eliah Kagan
8

Aby usunąć plik, musisz mieć uprawnienia do zapisu we wszystkich katalogach, z którymi plik jest powiązany. Aby odłączyć go od jednego katalogu, musisz mieć uprawnienia do zapisu w tym katalogu.

Tak długo, jak dasz uprawnienia do zapisu (lub nawet prawo własności) do pliku, ale nie do katalogu lub katalogów, z którymi plik jest powiązany, plik ten nie może zostać usunięty.

Najlepszym sposobem na osiągnięcie tego byłoby połączenie tego pliku z katalogiem, który jest własnością roota i który nie może być zapisany przez nikogo. Zamiast tego możesz uczynić go własnością, co oznaczałoby, że ty i root moglibyście go usunąć.

Pozwoliłoby to innym użytkownikom połączyć ten plik z innymi katalogami i odłączyć go od tego momentu, ale nadal nie byliby w stanie usunąć pliku, ponieważ mogliby odłączyć go od twojego katalogu.

Zauważ, że aby to w pełni działało, należy kontrolować uprawnienia do zapisu każdego komponentu ścieżki do pliku. Ponieważ na przykład, jeśli plik jest /a/b/the-filei /a/bnikt nie może go zapisać, ale każdy ma dostęp do zapisu /a, wówczas może zmienić nazwę /a/bna coś innego i odtworzyć własne /a/bi utworzyć /a/b/the-filetam własne .

Stéphane Chazelas
źródło