Программы
Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Само собой, root может всё (если введёт пару команд), однако, это вполне легальный способ запретить изменение файла.

Я уже писал о правах на файлы в Linux, MacOS и FreeBSD – самых популярных Unix-подобных операционных системах. Там были описаны основные идеи и команды для работы с правами доступа в Linux и т.д. Однако, помимо прав доступа есть ещё и атрибуты файлов. Эти атрибуты отвечают за разные дополнительные возможности использования файлов. Один из них – атрибут иммутабельности (неизменчивости).

К примеру, пользователь с высокими привилегиями (например, root) может установить аттрибут иммутабельности на файл командой chattr:

chattr +i /path/to/file

– таким образом файл или директории становятся неизменяемыми. Это, к слову, мы использовали для отключения Zeitgeist (система отслеживания активности пользователя на файловой системе) в Ubuntu.

Аналогично установке атрибута, можно его и снять:

chattr -i /path/to/file

Или же рекурсивно для всех директорий и файлов внутри какой-то директории:

chattr +i -R /path/to/directory

При чём, это относится не только к редактированию файлов, но и к удалению (а значит и перемещению). Пример использования:

$ touch 1.txt
$ sudo chattr +i 1.txt 
[sudo] password for user: 
$ rm 1.txt 
rm: cannot remove '1.txt': Operation not permitted
$ echo Hello >> 1.txt 
-bash: 1.txt: Operation not permitted
$ chattr -i 1.txt  
chattr: Operation not permitted while setting flags on 1.txt 
$ sudo chattr -i 1.txt 
$ echo Hello >> 1.txt 
$ rm 1.txt 

Вот так один маленький, но гордый атрибут может предотвратить случайное изменение файлов!