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.
root
?
vim
faktycznie zmienia uprawnienia, a następnie odkłada je z powrotem.