Po zalogowaniu mogę wykonać następujące czynności:
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
Następnie mogę otworzyć vima (nie jako root
), edytować bar
, wymusić zapis za pomocą w!
, a plik zostanie zmodyfikowany.
Jak mogę sprawić, aby system operacyjny nie zezwolił na jakąkolwiek modyfikację pliku?
AKTUALIZACJA 02 marca 2017 r
chmod 500 foo
to czerwony śledź: uprawnienie do zapisu w katalogu nie ma nic wspólnego z możliwością modyfikowania zawartości pliku - tylko z możliwością tworzenia i usuwania plików.chmod 400 foo/bar
w rzeczywistości zapobiega zmianie zawartości pliku. Ale , to jednak nie zapobiega uprawnienia pliku jest przed zmianą - właściciel pliku może zawsze zmienić uprawnienia jego akt jest (zakładając, że mogą one uzyskać dostępu do pliku czyli zezwolenie na wykonywanie wszystkich katalogów przodków). W rzeczywistości strace (1) ujawnia, że właśnie to robi vim (7.4.576 Debian Jessie) - vim wywołuje chmod (2), aby tymczasowo dodać uprawnienia do zapisu dla właściciela pliku, modyfikuje plik, a następnie wywołuje chmod ( 2) ponownie, aby usunąć uprawnienie do zapisu. Dlatego przy użyciuchattr +i
działa - tylko root może wywoływaćchattr -i
. Teoretycznie vim (lub jakikolwiek program) mógłby zrobić to samo z chattr jak z chmodem na niezmiennym pliku, jeśli działa jako root.
źródło
vim
faktycznie zmienia uprawnienia, a następnie odkłada je z powrotem.root
?Odpowiedzi:
Możesz ustawić atrybut „niezmienny” w większości systemów plików w Linuksie.
Aby usunąć atrybut niezmienny, używasz
-
zamiast+
:Aby zobaczyć bieżące atrybuty pliku, możesz użyć lsattr:
Strona podręcznika chattr (1) zawiera opis wszystkich dostępnych atrybutów. Oto opis
i
:źródło
chattr
polecenie było częściąe2fsprogs
pakietu w moim systemie. Dlatego złożyłem to oświadczenie. Zaktualizowałem odpowiedź na podstawie Twojego komentarza.Możesz:
root
lub nowo utworzonego użytkownika fikcyjnegochmod 440
aby zezwolić na czytanie według grupy (czyli ciebie).Jeśli właściwy użytkownik nie jest jedynym w tej grupie, powinieneś utworzyć nową grupę, dodać tylko do niej i użyć tej grupy. Jednak nie jesteś właścicielem pliku, dlatego
vi
nie możesz zmienić właściciela pliku.źródło
:w!
). vim nie idzie jednak tak daleko, jak tymczasowa zmiana uprawnień do katalogu. Dlatego zachowanie katalogu, w którym nie można zapisać, powinno być bezpieczne.Aby całe drzewo katalogów było tylko do odczytu:
Aby uczynić go ponownie czytelnym, zmień
+i
na-i
.źródło