Простой способ запретить изменение файла через терминал Linux

Однажды я зашел на сервер клиента, который принимали на обслуживание, чтобы добавить нужные SSH-ключи через файл authorized_keys.

Однажды я зашел на сервер клиента, который принимали на обслуживание, чтобы добавить нужные SSH-ключи через файл authorized_keys. Какого же было моё удивление, когда открыв из-под пользователя root этот файл для редактирования, обнаружил, что запись в него запрещена. Казалось бы, я root-пользователь и мне открыты должны быть все пути, но нет...

Так, сам того не зная тогда, я познакомился с атрибутом неизменяемости файла или immutable bit. Про него и пойдет сегодня речь в статье.

📁 Атрибут неизменяемости файла или immutable bit: суть и особенности применения

Название говорит само за себя: бит неизменяемости (immutable bit) назначается файлу для того, чтобы защитить его от изменений. Работает этот бит в файловых системах семейства EXT (EXT3 или EXT4).

Чтобы установить этот бит файлу необходимо использовать системную утилиту chattr и быть суперпользователем.

➕ Защищаем файл от изменения

Представим, что у нас есть ОЧЕНЬ ВАЖНЫЙ файл important-file.txt, изменять который нельзя не при каких условиях.

Очень важный файл
Очень важный файл

Чтобы установить бит неизменяемости используем утилиту chattr, которая идёт из коробки в дистрибутивах Linux.

chattr +i /home/jc/important-file.txt

Теперь при попытке открыть файл для редактирования появится сообщение о том, что он не доступен для записи. При этом не имеет никакого значения под каким пользователем вы попытаетесь его изменить.

Защита от изменений установлена
Защита от изменений установлена

Чтобы увидеть этот бит неизменяемости наглядно воспользуемся следующей командой:

lsattr -a /home/jc/important-file.txt

Смотрим на бит неизменяемости
Смотрим на бит неизменяемости

Буква i в выхлопе указывает на то, что immutable bit установлен.

➖ Убираем защиту от изменения

Пойдем в обратную сторону и уберем бит неизменяемости. Для этого, как ни странно, понадобится всё также утилита chattr и права суперпользователя:

chattr -i /home/jc/important-file.txt

Теперь файл доступен для внесения изменений и их сохранений. Правда, просто?

Защита от изменений снята
Защита от изменений снята

Если теперь вновь проверить наличие immutable bit, то вполне естественно, что его там не окажется.

Смотрим на бит неизменяемости и не видим его
Смотрим на бит неизменяемости и не видим его

🔧 Сценарий использования такой защиты от изменений

Как уже упоминалось в начале статьи, таким образом можно закрыть файл authorized_keys от любых изменений извне, чтобы плохиши не насовали туда своих публичных ключей. Да и в принципе, таким простым способом можно защитить от случайных изменений любой файл, который изменять нежелательно. Например, некоторые админы, как я слышал, таким образом защищают файл /etc/shadow, чтобы нельзя было добавить нового пользователя с паролем.

Кроме того, установка бита неизменяемости позволяет защитить файл от воздействия команды на удаление (rm), что подстраховывает важные файлы от случайного (или преднамеренного) удаления.

Таким образом, можно организовать простую защиту файлов практически от всех случайных действий со стороны.

Если говорить про меня, то бит неизменяемости установлен на текстовый файл, который хранится в облаке и где содержится важный токен, необходимый для работы эмулятора терминала Tabby. Чтобы не внести случайным образом в содержимое файла изменений и не удалить его, я накинул

🏁 Подведем итоги

В первую очередь этот материал будет полезен начинающим системным администраторам: тем, кто сталкивается с битом неизменяемости и не сразу понимает что к чему, и тем, кто думает о простом способе запретить редактирование какого-либо файла на сервере. Обычным же пользователям Linux-дистрибутивов будет, наверняка, просто интересно узнать, что есть такая штука, как immutable bit.