Під час входу в систему я можу зробити наступне:
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
фактично змінюються дозволи, а потім повертаються назад.