Linux - Czy istnieje sposób, aby zapobiec / chronić plik przed usunięciem, nawet przez root?

89

Mam bardzo ważny plik, z którego korzysta aplikacja w moim miejscu pracy. Muszę się upewnić, że nie jest on w ogóle usuwany. Jak to zrobić?


źródło
13
Utwórz kopię zapasową, aby móc ją przywrócić ... Poza tym chattr +imoże pomóc, ale sprawi również, że plik będzie tylko do odczytu (i można go zastąpić chattr -i), możesz także spróbować zabezpieczyć go za pomocą SELInux itp.
Sven
43
Czy root może stworzyć proces, którego nawet root nie może zabić?
Mark Gabriel,
4
@MarkGabriel Tak. Widelec bomba. :)
reirab
8
Administrator HW może przyjść i usunąć dysk, zniszczyć go, spalić resztki i podać je świniom. Lub, lepiej, niektóre programiści C (++) mogą wywoływać demony nosowe. Cokolwiek jest dla Ciebie ważne, wykonaj kopię zapasową. Dwa razy.
Pavel

Odpowiedzi:

133

Tak, możesz zmienić atrybuty pliku na „tylko do odczytu”.

Polecenie to:

chattr +i filename

I aby to wyłączyć:

chattr -i filename

Od man chattr:

Pliku z iatrybutem nie można modyfikować: nie można go usunąć ani zmienić jego nazwy, nie można utworzyć łącza do tego pliku i nie można zapisać danych w pliku. Tylko superużytkownik lub proces posiadający tę CAP_LINUX_IMMUTABLEzdolność może ustawić lub usunąć ten atrybut.

Itai Ganot
źródło
11
Dla zainteresowanych odpowiednikiem bsd jestchflags schg
Andrzej Domaszek
85
Należy pamiętać, że użytkownik z dostępem do konta root może odznaczyć tę flagę, a następnie usunąć plik. Jest to mało prawdopodobne, aby stało się to przez przypadek, ale nie narusza celowego usunięcia.
Przyznaj
6
@Grant, nie jeśli Securelevel jest wystarczająco wysoko ustawiony. Proces rozruchu ustawia poziom bezpieczeństwa na 2 przed włączeniem sieci, więc zresetowanie flagi wymaga dostępu do komputera lokalnego (ale oznacza to, że pliki użyte w procesie rozruchu przed tym czasem również muszą być niezmienne).
Simon Richter,
16
@Grant Jeśli ktoś chce doprowadzić go do skrajności, nie można zapobiec usunięciu partycji lub włożeniu dysku do pieca lub rozpadu protonów za 10 ^ 30 lat ...
Hagen von Eitzen
2
@Itai Ganot, człowieku, chciałbym to przeczytać 4 dni temu. Byłem pytaniem podczas egzaminu, który podjąłem = /
vfbsilva
84

Nagraj na płytę CD. Włóż dysk CD do napędu CD-ROM i stamtąd przejdź do niego.

Thorbjørn Ravn Andersen
źródło
15
+1 za nieszablonowe myślenie. I, afaik, był również używany wcześniej w niektórych okolicznościach (czarny napęd CD-ROM z CD w nim dostarczony do miejsca docelowego). W każdym razie może nie być odpowiednie, jeśli ktoś jest w stanie odłączyć dysk.
Alex Mazzariol,
1
KISS Uwielbiam to! +1
MonkeyZeus,
2
Myślę, że to poprawna odpowiedź na to pytanie. Zmiana atrybutu pliku (chattr -i) nie może zapobiec złośliwym działaniom.
Bruno von Paris,
7
Dzisiaj lepszym rozwiązaniem może być pełnowymiarowa karta SD we wbudowanym czytniku kart - niższe zużycie energii, szybszy dostęp w wielu przypadkach i bardziej trwałe przy braku zapisu.
Chris H
3
@ jpmc26 stąd napęd CD-ROM. Są tylko do odczytu /.
Thorbjørn Ravn Andersen
29
  1. Utwórz obraz systemu plików.
  2. Zamontuj obraz.
  3. Skopiuj plik do zamontowanego obrazu.
  4. Odmontuj obraz i podłącz go ponownie jako tylko do odczytu.
  5. Teraz nie możesz go usunąć.

Przykład:

# dd if=/dev/zero of=readonly.img bs=1024 count=1024
# mkfs.ext2 readonly.img
# mkdir readonlyfolder
# mount readonly.img readonlyfolder/
# echo "can't delete this" > readonlyfolder/permanent.txt
# umount readonlyfolder
# mount -o ro readonly.img readonlyfolder
# cat readonlyfolder/permanent.txt 
can't delete this
# rm readonlyfolder/permanent.txt 
rm: cannot remove `readonlyfolder/permanent.txt': Read-only file system
Ken A.
źródło
3
mount -o remount,rw readonlyfolder/ && rm readonlyfolder/permanent.txt
Kaz Wolfe,
3
Idąc dalej, możesz użyć squashfslub cramfsktóre są skompresowane i tylko do odczytu. Potrzebuje specjalnego narzędzia do zbudowania systemu plików.
Zan Lynx,
7

Linux ma tak zwaną opcję bind-mount , która jest dość potężną i przydatną funkcją, aby wiedzieć :

%  cd $TMP && mkdir usebindmountluke && cd usebindmountluke
%  echo usebindmountluke > preciousfile
%  sudo mount -B preciousfile preciousfile
%  sudo mount -oremount,ro preciousfile
%  echo sowhat > preciousfile
zsh: read-only file system: preciousfile
%  rm preciousfile
rm: cannot remove ‘preciousfile’: Read-only file system

- tutaj jest wykonywany sam plik bind-mount (tak, możesz to zrobić w systemie Linux), a następnie jest on ponownie montowany w trybie R / O. Oczywiście można to zrobić również w katalogu.

poige
źródło
6

Powinieneś również utworzyć wiele twardych linków do pliku. Powinny one znajdować się w różnych lokalizacjach, do których zwykli użytkownicy nie mają dostępu.

W ten sposób, nawet jeśli uda im się zastąpić twoją ochronę chattr, dane pozostaną i możesz łatwo przywrócić je tam, gdzie ich aplikacja szuka.

Andrzej
źródło
11
Twarde linki nie chronią zawartości pliku.
200_success
Zapewnią one jednak dodatkową ochronę przed USUWANIEM, co było pierwotnym pytaniem.
grill
2
@barbecue Jeśli plik jest rozłączony pod nazwą, której szuka aplikacja, nie ma znaczenia, że ​​zawartość pliku istnieje pod inną nazwą. Dla wszystkiego, co szuka pliku o oczekiwanej nazwie, plik nadal został usunięty.
CVn
5

Inni odpowiedzieli na twoje pytanie tak, jak je zadałeś. Jak wspomniano w komentarzu @Sven, ogólne rozwiązanie pytania: „Jak upewnić się, że nigdy nie stracę pliku?” jest utworzenie kopii zapasowej pliku. Zrób kopię pliku i przechowuj go w wielu miejscach. Ponadto, jeśli plik jest niezwykle ważny, a Twoja firma ma zasady tworzenia kopii zapasowych ważnych danych w usłudze tworzenia kopii zapasowych, możesz rozważyć włączenie tego pliku do usługi.

Kevin
źródło
2
Oczywiście plik jest regularnie archiwizowany, chciałem tylko kolejnej warstwy ochrony przed użytkownikami, którzy czasami pracują na urządzeniu z uprawnieniami użytkownika root.
5

Na Linuksem niezmienne flaga jest obsługiwana tylko w niektórych rodzajach systemu plików (większość rodzimych, takich jak te ext4, xfs, btrfs...)

W systemach plików, w których nie jest on obsługiwany, inną opcją jest podłączenie pliku do samego siebie w trybie tylko do odczytu. Należy to zrobić w dwóch krokach:

mount --bind file file
mount -o remount,bind,ro file

Trzeba to jednak zrobić przy każdym uruchomieniu, na przykład przez /etc/fstab.

sch
źródło
Mam nadzieję, że każdy umountplik uzyska ponownie uprawnienia do zapisu
whoan
3

W komentarzu do odpowiedzi Kevina Jerry wspomina:

Oczywiście plik jest regularnie archiwizowany, chciałem tylko kolejnej warstwy ochrony przed użytkownikami, którzy czasami pracują na urządzeniu z uprawnieniami użytkownika root. -

Zakładam, że nie możesz zmienić tej praktyki, ponieważ jest to naprawdę zły pomysł.

Wszystkie sugestie dotyczące korzystania z urządzenia tylko do odczytu wiążą się z tym samym problemem - dzięki temu PITA może wprowadzać uzasadnione zmiany w razie potrzeby. W przypadku dysku, który można zablokować, takiego jak karta SD, możesz napotkać problem, że nagle jesteś narażony na niebezpieczeństwo, gdy odblokujesz go, aby wprowadzić zmiany.

Zamiast tego zaleciłbym skonfigurowanie innej maszyny jako serwera NFS i udostępnienie katalogu z ważnymi plikami na komputerach, na których użytkownicy rootują. Udostępnij montaż jako tylko do odczytu, aby maszyny z użytkownikami, którym nie ufasz, nie mogły wprowadzać żadnych modyfikacji. Gdy musisz wprowadzić zmiany zgodnie z prawem, możesz połączyć się z serwerem NFS i tam wprowadzić zmiany.

Używamy tego w naszych serwerach WWW, aby udany exploit przeciwko serwerowi WWW nie był w stanie wstawić ani zmienić żadnych plików, które serwer następnie odsunąłby, ani zmienić konfiguracji.

Pamiętaj, że można to pominąć w ten sam sposób, w jaki wszystkie związane z punktem montowania mogą być:

  • Utwórz kopię chronionego katalogu
  • Odmontuj katalog
  • Przenieś kopię w miejsce uchwytu lub dowiązanie symboliczne, jeśli nie ma wystarczającej ilości miejsca.
Joe H.
źródło
Dlaczego regularne tworzenie kopii zapasowych ważnych plików jest „naprawdę, naprawdę złym pomysłem”, a także podejmowanie prób ochrony oryginału przed przypadkowym usunięciem? W pierwotnym pytaniu PO oraz z komentarza OP do udzielonej przez ciebie odpowiedzi jasno wynika, że ​​problemem nie jest złośliwa aktywność, ale przypadkowa / niekompetentna aktywność.
Craig,
1
@Craig: to zły pomysł, aby mieć wielu użytkowników z rootem, szczególnie jeśli nie ufają im, że nie zadzierają z krytycznymi plikami.
Joe H.
Ach ... no cóż, oczywiście, że tak. :-) Ale to nie było sedno pytania OP. PO zapewnił, że nie użytkownicy z prawami dostępu administratora, który należy chronić przed przypadkowym usunięciem pliku.
Craig,
@Craig: to nie może być sedno kwestii, ale to jest sedno problemu (problem XY?) ... ale nie mam pojęcia, co robią jako root, więc jeśli mogłyby one skorzystać z setuid i / lub ograniczone uprawnienia sudo. Powinieneś ponownie przeczytać pytanie, ponieważ Jerry nie wspomniał, że próbuje tylko chronić się przed przypadkowym usunięciem („muszę się upewnić, że nie zostanie ono w ogóle usunięte”) i podał tylko jedną odpowiedź patrz (co wywołało moją odpowiedź).
Joe H.
2

Dlaczego nie stworzyć obrazu ISO 9660, który z założenia jest tylko do odczytu?

Zamontuj obraz ISO, a będzie on wyglądał jak dysk CD-ROM, ale z wydajnością dysku twardego, a pliki na zamontowanym obrazie będą tak samo bezpieczne przed usunięciem, jak pliki na fizycznym dysku CD-ROM.

Pomysł wypalenia wrażliwego pliku na CD i uruchomienia go z CD-ROMu jest interesujący, zakładając, że ustawienie niezmiennego bitu na pliku nie jest wystarczające.

Istnieją potencjalne negatywne problemy z uruchamianiem go z fizycznego dysku CD, w tym wydajność (napędy CD-ROM są znacznie wolniejsze niż dyski twarde lub dyski SSD). Istnieje prawdopodobieństwo, że CD-ROM zostanie usunięty przez osobę o dobrych intencjach i zastąpiony inną płytą, do której potrzebuje dostępu. Istnieje prawdopodobieństwo, że złośliwy podmiot po prostu wyjmie dysk i wyrzuci go do kuchenki mikrofalowej (lub kosza), w ten sposób „usuwając” plik. Istnieje niedogodność związana z posiadaniem dedykowanego sprzętowego napędu CD-ROM tylko dla tego jednego pliku i innych czynników.

Ale PO jasno stwierdził, że głównym celem jest ochrona przed przypadkowym usunięciem, a nie przed złośliwymi czynami, oraz że plik (-y) jest archiwizowany i możliwy do odzyskania w razie wypadku, ale jest wysoce pożądane, aby plik nigdy nie zostać przypadkowo usunięty.

Wygląda na to, że uruchomienie pliku z zamontowanego obrazu ISO spełniłoby to wymaganie.

Craig
źródło
1
Root może nadal usunąć plik, manipulując obrazem bezpośrednio. Jest to zwykły plik, który można zamontować.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen Jak to zrobić? Z założenia ISO 9660 jest niezmienny. Podmiot dokonujący tej zmiany musiałby usunąć i zastąpić cały plik ISO. Nie dlatego, że nie mogli tego zrobić. Ale nie mogli wejść i chirurgicznie usunąć jednego pliku bez ogromnej wiedzy specjalistycznej, nawet jeśli nawet wtedy. O wiele łatwiej byłoby wyjąć fizyczny CD-ROM z napędu i wrzucić go do śmietnika. ;-)
Craig
Nie trzeba być wyrafinowanym - wystarczy zastąpić plik obrazu zerami.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen Z łatwością przyznam się do tego. Zastrzeżenie polega na tym, że wymagałoby to celowego rozmontowania obrazu i zastąpienia go. Dokładny sprawca właśnie shredw tym momencie. Ale chyba, że ​​odmawiasz fizycznego dostępu do maszyny, nadal wydaje się łatwiej po prostu wyjąć fizyczną płytę CD z napędu i wrzucić ją do śmietnika niż odinstalować i zastąpić plik ISO, chociaż jedno z nich jest łatwe. I OP stwierdził, że ważne pliki są regularnie archiwizowane, więc jest to tylko dodatkowy środek zapobiegający przypadkowym uszkodzeniom, a nie złośliwemu psotom.
Craig,
Wskazałem, jak zmienić obraz ISO9660, nawet jeśli ma on być niezmienny. Chodzi mi o to, że jeśli w ogóle trochę można zapisać, root może to napisać.
Thorbjørn Ravn Andersen