После входа в систему я могу сделать следующее:
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
Затем я могу открыть vim (не как root
), редактировать bar
, форсировать запись w!
, и файл будет изменен.
Как я могу заставить операционную систему запретить изменение файла?
ОБНОВЛЕНИЕ 02 марта 2017
chmod 500 foo
это красная сельдь: разрешение на запись в каталог не имеет ничего общего с возможностью изменять содержимое файла - только возможность создавать и удалять файлы.chmod 400 foo/bar
фактически предотвращает изменение содержимого файла. Но это не препятствует изменению прав доступа к файлу - владелец файла всегда может изменить права доступа к своему файлу (при условии, что они могут получить доступ к файлу, т. Е. Разрешение на выполнение для всех каталогов предков). Фактически, strace (1) показывает, что именно это делает vim (7.4.576 Debian Jessie) - vim вызывает chmod (2), чтобы временно добавить разрешение на запись для владельца файла, изменяет файл, а затем вызывает chmod ( 2) снова убрать разрешение на запись. Вот почему использованиеchattr +i
работает - может звонить только rootchattr -i
. Теоретически, vim (или любая другая программа) может сделать то же самое с chattr, как и с chmod для неизменяемого файла, если он запускается от имени пользователя root.
root
?
vim
происходит изменение прав доступа, а затем возвращение.