Jak korzystać z polecenia chattr w systemie Linux?

Opublikowany: 2022-06-28
Terminal Linux na czerwonym tle laptopa.
fatmawati achmad zaenuri/Shutterstock

Oprócz zwykłych uprawnień do odczytu, zapisu i wykonywania plików, pliki systemu Linux mają inny zestaw atrybutów, które kontrolują inne cechy pliku. Oto jak je zobaczyć i zmienić.

Uprawnienia i atrybuty

W systemie Linux to, kto może uzyskać dostęp do pliku i co może z nim zrobić, jest kontrolowane przez zestaw uprawnień zorientowany na użytkownika . To, czy możesz odczytać zawartość pliku, zapisać do niego nowe dane, czy też wykonać plik, jeśli jest to skrypt lub program, zależy od tego zestawu uprawnień. Uprawnienia są stosowane do pliku, ale określają ograniczenia i możliwości dla różnych kategorii użytkowników.

Istnieją uprawnienia właściciela pliku, grupy pliku i innych — czyli użytkowników, którzy nie należą do dwóch pierwszych kategorii. Możesz użyć polecenia ls z opcją -l (długa lista), aby zobaczyć uprawnienia do pliku lub katalogu.

Jak korzystać z polecenia chmod w systemie Linux
POWIĄZANE Jak używać polecenia chmod w systemie Linux

Aby zmienić uprawnienia, użyj polecenia chmod . Przynajmniej możesz, jeśli masz uprawnienia do zapisu pliku lub jesteś użytkownikiem root.

Widzimy, że uprawnienia do plików są zorientowane na użytkownika, ponieważ przyznają lub usuwają uprawnienia na poziomie użytkownika. Z kolei atrybuty pliku są skoncentrowane na systemie plików. Podobnie jak uprawnienia, są one ustawiane na pliku lub katalogu. Ale po ustawieniu są takie same dla wszystkich użytkowników.

Atrybuty to osobny zbiór ustawień od uprawnień. Atrybuty kontrolują cechy, takie jak niezmienność i inne zachowania na poziomie systemu plików. Aby zobaczyć atrybuty pliku lub katalogu, używamy polecenia lsattr . Do ustawienia atrybutów używamy komendy chattr .

Wszystko, co kiedykolwiek chciałeś wiedzieć o i-węzłach w systemie Linux
POWIĄZANE Wszystko, co kiedykolwiek chciałeś wiedzieć o i-węzłach w systemie Linux

Uprawnienia i atrybuty są przechowywane w i- węzłach . I-węzeł to struktura systemu plików, która przechowuje informacje o obiektach systemu plików, takich jak pliki i katalogi. Lokalizacja pliku na dysku twardym, data jego utworzenia, uprawnienia i atrybuty są przechowywane w jego i-węźle.

Ponieważ różne systemy plików mają różne podstawowe struktury i możliwości, atrybuty mogą zachowywać się inaczej — lub być całkowicie ignorowane — przez niektóre systemy plików. W tym artykule używamy ext4 , który jest domyślnym systemem plików dla wielu dystrybucji Linuksa.

Patrząc na atrybuty pliku

Polecenia chattr i lsattr będą już obecne na twoim komputerze, więc nie ma potrzeby instalowania czegokolwiek.

Aby sprawdzić atrybuty plików w bieżącym katalogu, użyj lsattr :

 lsattr 

Wyświetlanie atrybutów plików dla wszystkich plików w katalogu

Linie przerywane to symbole zastępcze dla atrybutów, które nie są ustawione. Jedynym ustawionym atrybutem jest atrybut e (zakresy). Pokazuje to, że i-węzły systemu plików używają — lub w razie potrzeby będą używać — ekstentów , aby wskazać wszystkie części pliku na dysku twardym.

Jeśli plik jest przechowywany w jednej ciągłej sekwencji bloków dysku twardego, jego i-węzeł musi tylko zarejestrować pierwszy i ostatni blok używany do przechowywania pliku. Jeśli plik jest pofragmentowany, i-węzeł musi rejestrować numer pierwszego i ostatniego bloku każdego fragmentu pliku. Te pary numerów bloków dysku twardego nazywane są rozszerzeniami.

To jest lista najczęściej używanych atrybutów.

  • a : Tylko dołącz. Do pliku z tym atrybutem można tylko dołączyć. Nadal można w nim zapisywać, ale tylko na końcu pliku. Nie można nadpisać żadnych istniejących danych w pliku.
  • c : Skompresowany. Plik jest automatycznie kompresowany na dysku twardym i dekompresowany podczas odczytu. Dane zapisywane w plikach są kompresowane przed zapisaniem na dysku twardym.
  • O : Brak atime w czasie. atime to wartość w i-węźle, która rejestruje ostatni dostęp do pliku.
  • C : Brak kopiowania przy zapisie. Jeśli dwa procesy żądają dostępu do pliku, można im nadać wskaźniki do tego samego pliku. Otrzymują własną unikatową kopię pliku tylko wtedy, gdy próbują zapisywać do pliku, co czyni go unikalnym dla tego procesu.
  • d : Bez zrzutu. Polecenie Linux dump służy do zapisywania kopii całych systemów plików na nośnikach kopii zapasowych. Ten atrybut sprawia, że dump ignoruje plik. Jest wykluczony z kopii zapasowej.
  • D : Synchroniczne aktualizacje katalogów. Gdy ten atrybut jest włączony dla katalogu, wszystkie zmiany w tym katalogu są zapisywane synchronicznie — to znaczy natychmiast — na dysku twardym. Operacje na danych mogą być buforowane.
  • e : Format zakresu. Atrybut e wskazuje, że system plików używa ekstentów do mapowania lokalizacji pliku na dysku twardym. Nie możesz tego zmienić za pomocą chattr . Jest to funkcja działania systemu plików.
  • i : Niezmienne. Niezmiennego pliku nie można modyfikować, w tym zmieniać nazwy i usuwać. Użytkownik root jest jedyną osobą, która może ustawić lub anulować ten atrybut.
  • s : Bezpieczne usuwanie. Gdy plik z tym zestawem atrybutów jest usuwany, bloki dysku twardego, które zawierały dane pliku, są zastępowane bajtami zawierającymi zera. Zauważ, że nie jest to honorowane przez system plików ext4 .
  • S : Aktualizacje synchroniczne. Zmiany w pliku z ustawionym atrybutem S są zapisywane w pliku synchronicznie.
  • u : Usunięcie pliku, który ma ustawiony atrybut u , powoduje utworzenie kopii pliku. Może to być korzystne dla odzyskiwania plików, jeśli plik został usunięty przez pomyłkę.

Zmiana atrybutów pliku

Komenda chattr pozwala nam zmienić atrybuty pliku lub katalogu. Aby zastosować lub usunąć atrybut, możemy użyć operatorów + (ustaw) i - (usuń), podobnie jak w przypadku polecenia i uprawnień chmod .

Polecenie chattr ma również operator = (tylko ustawianie). Powoduje to ustawienie atrybutów pliku lub katalogu tylko na atrybuty określone w poleceniu. Oznacza to, że wszystkie atrybuty niewymienione w wierszu poleceń są usuwane .

Ustawianie atrybutu Tylko dołączanie

Ustawmy atrybut "tylko do dołączania" w pliku tekstowym i zobaczmy, jak wpływa on na to, co możemy zrobić z plikiem.

 sudo chattr + plik tekstowy.txt 

Ustawianie atrybutu „tylko dołączanie” w pliku tekstowym

Możemy sprawdzić, czy bit tylko do dołączania został ustawiony za pomocą lsattr :

 lsattr plik-tekstowy.txt 

Wyświetlanie listy atrybutów pliku tekstowego

Litera „ a ” wskazuje, że atrybut został ustawiony. Spróbujmy nadpisać plik. Przekierowanie wyjścia do pliku z pojedynczym nawiasem ostrym „ > ” zastępuje całą zawartość pliku przekierowanym wyjściem.

Wstępnie załadowaliśmy plik tekstowy z tekstem zastępczym lorem ipsum .

 kot plik-tekstowy.txt 

Tekst zastępczy w pliku tekstowym

Przekierujemy wyjście z ls do pliku:

 ls -l > plik-tekstowy.txt
 sudo ls -l > plik-tekstowy.txt 

Próbuję nadpisać plik tekstowy tylko do dołączania

Operacja nie jest dozwolona, ​​nawet jeśli używamy polecenia sudo .

Jeśli użyjemy dwóch nawiasów ostrych „ >> ” do przekierowania wyjścia, zostanie on dodany do istniejących danych w pliku. Powinno to być akceptowalne dla naszego pliku tekstowego zawierającego tylko dołączenie.

 sudo ls -l >> plik-tekstowy.txt 

Przekierowywanie wyjścia na koniec pliku tekstowego

Wróciliśmy do wiersza poleceń bez żadnych komunikatów o błędach. Zajrzyjmy do pliku, aby zobaczyć, co się stało.

 kot plik-tekstowy.txt 

Badanie zawartości pliku tekstowego

Przekierowane dane wyjściowe z ls zostały dodane na końcu pliku.

Nowe dane dołączane do pliku tekstowego tylko z dołączaniem

Chociaż możemy dołączyć dane do pliku, jest to jedyna zmiana, jaką możemy w nim wprowadzić. Nie możemy go usunąć ani rootować.

 rm plik-tekstowy.txt
 sudo rm plik tekstowy.txt 

Nieudane usunięcie pliku tekstowego z dołączaniem

Ustawianie niezmiennego atrybutu

Jeśli chcesz chronić plik, do którego nigdy nie będą dodawane nowe dane, możesz ustawić atrybut immutable. Zapobiega to wszelkim zmianom w pliku, w tym dołączaniu danych.

 sudo chattr +i drugi plik.txt
 lsattr drugi-plik.txt 

Ustawianie niezmiennego atrybutu w pliku tekstowym

Widzimy „ i ” wskazujące, że atrybut niezmienny został ustawiony. Po uczynieniu naszego pliku niezmiennym, nawet użytkownik root nie może zmienić jego nazwy ( mv ), usunąć go ( rm ) ani dodać do niego danych.

 sudo mv drugi-plik.txt nowa-nazwa.txt
 sudo rm drugi plik.txt
 sudo ls -l >> drugi-plik.txt 

Niezmienny plik odporny na zmiany

Nie polegaj na bezpiecznym usuwaniu na ext4

Jak wspomnieliśmy, niektóre systemy operacyjne nie obsługują wszystkich atrybutów. Atrybut bezpiecznego usuwania nie jest honorowany przez rodzinę systemów plików ext , w tym ext4 . Nie polegaj na tym, aby bezpiecznie usuwać pliki.

Łatwo zauważyć, że to nie działa w ext4 . Ustawimy atrybut s (bezpieczne usuwanie) w pliku tekstowym.

 sudo chattr + trzeci plik.txt 

Ustawianie atrybutu bezpiecznego usuwania w pliku tekstowym

To, co zamierzamy zrobić, to znaleźć i-węzeł, który przechowuje metadane dotyczące tego pliku. W i-węźle znajduje się pierwszy blok dysku twardego zajmowany przez plik. Plik zawiera tekst zastępczy lorem ipsum .

Przeczytamy ten blok bezpośrednio z dysku twardego, aby sprawdzić, czy odczytujemy poprawną lokalizację dysku twardego. Usuniemy plik, a następnie ponownie przeczytamy ten sam blok twardego nurkowania. Jeśli honorowany jest atrybut bezpiecznego usuwania, powinniśmy odczytać wyzerowane bajty.

Możemy znaleźć i-węzeł pliku za pomocą polecenia hdparm z --fibmap (mapa bloków plików).

 sudo hdparm --fibmap trzeci plik.txt 

Znajdowanie i-węzła pliku

Pierwszy blok dysku twardego to 18100656. Użyjemy polecenia dd , aby go odczytać.

Dostępne opcje to:

  • if=/dev/sda : Odczyt z pierwszego dysku twardego na tym komputerze.
  • bs=512 : Użyj bloku dysku twardego o rozmiarze 512 bajtów.
  • skip=18100656 : Pomiń wszystkie bloki przed blokiem 18100656. Innymi słowy, rozpocznij czytanie od bloku 18100656.
  • count=1 : Odczytaj jeden blok danych.
 sudo dd if=/dev/sda bs=512 skip=18100656 count=1 

Odczytywanie pierwszego bloku dysku twardego w pliku

Zgodnie z oczekiwaniami widzimy tekst zastępczy lorem ipsum . Czytamy właściwy blok na dysku twardym.

Teraz usuniemy plik.

 rm trzeci-plik.txt 

Jeśli przeczytamy ten sam blok dysku twardego, nadal możemy zobaczyć dane.

 sudo dd if=/dev/sda bs=512 skip=18100656 count=1 

Odczytywanie danych z bloku dysku twardego używanego przez usunięty plik

Ponownie, nie polegaj na tym, jeśli chodzi o bezpieczne usuwanie na ext4 . Istnieją lepsze metody usuwania plików, aby nie można ich było odzyskać.

POWIĄZANE: Jak bezpiecznie usuwać pliki w systemie Linux

Przydatne, ale używaj ostrożnie

Ustawienie atrybutów plików może sprawić, że będą one odporne na przypadkową awarię. Jeśli nie możesz usunąć lub nadpisać pliku, jest to całkiem bezpieczne.

Możesz pomyśleć, że chcesz zastosować je do plików systemowych i zwiększyć bezpieczeństwo instalacji Linuksa. Jednak pliki systemowe muszą być okresowo wymieniane w miarę wydawania aktualizacji lub stosowania uaktualnień. Z tego powodu najbezpieczniej jest używać tych atrybutów tylko w plikach, które sam stworzyłeś.

POWIĄZANE: Jak zabezpieczyć serwer Linux za pomocą fail2ban