После входа в систему я могу сделать следующее:
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.
источник
vim
происходит изменение прав доступа, а затем возвращение.root
?Ответы:
Вы можете установить атрибут «неизменный» для большинства файловых систем в Linux.
Чтобы удалить неизменный атрибут, вы используете
-
вместо+
:Чтобы увидеть текущие атрибуты для файла, вы можете использовать lsattr:
Страница man chattr (1) содержит описание всех доступных атрибутов. Вот описание для
i
:источник
chattr
команда была частьюe2fsprogs
пакета в моей системе. Вот почему я сделал это заявление. Я обновил ответ на основе вашего комментария.Вы можете:
root
фиктивного пользователяchmod 440
чтобы разрешить чтение по группе (это вы).Если правильный пользователь не единственный в этой группе, вы должны создать новую группу и добавить в нее только его, и использовать эту группу для нее. Однако вы не являетесь владельцем файла, поэтому вы
vi
не можете изменить владельца файла.источник
:w!
). vim не заходит так далеко, как временное изменение прав доступа к каталогу. Поэтому хранить каталог без записи должно быть безопасным.Чтобы сделать все дерево каталогов доступным только для чтения:
Чтобы снова сделать его читабельным, измените
+i
на-i
.источник