Как запретить изменять файл в GNU/Linux?

Сегодня речь пойдет о команде, потенциал которой, по моему мнению, недостаточно ценят. А зря. Да, аналогичного функционала можно попробовать достичь в привычных chmod и chown, но все-таки со старой-доброй chattr запретить какому-либо файлу подвергаться каким бы то ни было изменениям можно эффективнее. И неважно, кто будет пытаться — вы, администратор или сама система, — никто не сможет повлиять на содержимое этого файла!

Для начала — небольшая предыстория. Она как раз покажет практическое применение команды, о которой мы говорим.

Как-то раз ко мне обратился клиент, у которого по какой-то причине постоянно самоизменялся файл /etc/resolv.conf. Да-да, именно самоизменялся, меняя нормальные значения на какой-то бред! Как результат, невозможно было выйти в Интернет, хотя адаптер вай-фай определялся и работал.

Естественно, я менял значения вручную, подставляя правильные, и тогда Интернет включался, однако первая же перезагрузка — и все значения опять сбиты.


Именно так я тогда и выглядел, и чувствовал себя

Перерыв десятки форумов и вспомнив все, что я вообще знаю про файл /etc/resov.conf, я сел читать также логи загрузки системы. Самое страшное, что  для каждой попытки что-то изменить приходилось перезагружаться.

Сам клиент принимал активное учасние в процессе — благо, человек тоже является линуксоидом со стажем, и за поддержкой, по его словам, обращается впервые. Не знаю, может, приврал — это уже подробности. Но мы с ним на пару переробовали все — файл менялся, хоть ты тресни. Даже с выключенными сетевыми драйверами. Даже в, казалось бы, полностью безопасных режимах. Даже после компиляции специфического ядра. Даже…

В какой-то момент мне просто надоело ковыряться. Глаза клиента горели в предвкушении новых открытий из этой практически детективной истории, однако мне просто хотелось побыстрее закончить.


По секрету говоря, хотелось сделать вот так! grin

Именно тогда я вспомнил про команду chattr.

Сама chattr очень многогоранна. Она предназначена для управления атрибутами файла, причем имеет достаточно широкий инструментарий, но сегодня нас интересует, как же запретить файлу изменяться.

Давайте-ка создадим файл! Откроем терминал в домашнем каталоге и выполним:

touch Permanent.txt

Это создаст текстовый файл с именем «Permanent.txt». Он нам понадобится для опытов. wink


Файл создан!

Следующей командой предлагаю добавить в него какой-то текст. Например, «LinuxTheBest.net» — почему бы и нет? smile Выполним команду:

echo 'LinuxTheBest.net' > ~/Permanent.txt

Теперь в нашем файле имеется название любимого сайта. Даже жаль его удалять, правда? lol

Вот и не будем удалять! Давайте вообще запретим кому-либо изменять его! Ибо  с̶в̶я̶щ̶е̶н̶н̶о̶ ̶и̶м̶я̶ ̶п̶о̶р̶т̶а̶л̶а̶ ̶н̶а̶ш̶е̶г̶о̶ именно ради того, чтобы научиться этому, вы и читаете мой бред.

sudo chattr +i ~/Permanent.txt

Теперь можете попробовать удалить его. Не стесняйтесь — количество попыток не ограничено! cool


Не удаляется! Даже через sudo! Даже от root!

Как видите, нашему файлу хоть бы хны.

К нулевому результату приведут также попытки переименовать файл или внести изменения в его содержимое.

Именно таким образом я раз и навсегда решил проблему с самоизменяющимся файлом /etc/resolv.conf: вписал туда нужные данные, сохранил изменения, а потом использовал команду chattr.

Кстати, если вы захотите сделать файл опять изменяемым, достаточно выполнить:

sudo chattr -i ~/Permanent.txt

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


Удалили!

Некоторые скажут, что можно было воспользоваться chmod и/или chown (о том, как работают эти команды, читайте в соответвующем материале). Но, во-первых, нам так и не удалось узнать, что именно изменяет файл, а во-вторых, не хотелось перебирать различные вариации распределения прав доступа. Ведь chattr +i — это быстрее и наверняка.

А вот и видео с примерами (на украинском языке):

Пользуетесь ли вы командой chattr? Была ли полезна вам эта небольшая история? Спешите поделиться с нами в комментариях!

Автор: root
Изображения: из открытых источников, к/ф «Хоттабыч» (2006) скриншоты автора

Не забудьте принять участие в конкурсе! Спасибо тем, кто уже прислал свои работы. cool

Автор публикации

не в сети 1 час

root

0
Адміністратор сайту «LinuxTheBest»
Комментарии: 232Публикации: 65Регистрация: 11-01-2019
Если Вам понравилась статья, то поделитесь ею в соц.сетях:

12
Отправить ответ

 
avatar
 
smilegrinwinkmrgreenneutraltwistedarrowshockunamusedcooleviloopsrazzrollcryeeklolmadsadexclamationquestionideahmmbegwhewchucklesillyenvyshutmouth
Фото и картинки
 
 
 
Другие файлы
 
 
 
5 Темы
7 Ответов
3 Комментаторов
 
Самый обсуждаемый
Горячие комментарии
8 Авторы комментариев
rootІgor.dobrodyазьМаксCOBA Последние авторы комментариев
viman
Участник
viman

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

maksim.mokrv
Участник

Коментар не за темою. Каталог “Усіляччя” – це класно. Візьму собі на озброєння. wink

Іgor.dobrody
Участник

Ще є наше гарне українське слово – “мотлох” wink

COBA
Гость
COBA

Network Manager, systemd заменяет resolv.conf. Обычное поведение, много где описано. Притом даже в самом файле написано не править его, так как система будет его перезаписывать. Т.е. не разобравшись в ситуации вы испортили работу систему Пример # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all… Читать далее »

mihail.tolochko
Гость

айс. Вы хорошую тему подняли. Сам боролся с этим по просторам инета. Респект и 100500 лайков Новому админу. Так держать. Вот один только маленький просьба. Общаться только на русском. я не нацци. Мой родной язык фарси, если буду на нем писать то как.. Просто не надо. И ко всем форумчанам, пишите на русском. это международный сайт. Спасибо.

GrigS
Участник

“with his charter in a foreign monastery”
international is international. Your eyesight: international – “пишите на русском”

Гость
Гость
Гость

Интересно, почему он изменялся?

maksim.mokrv
Участник

Швидше за все там була одна з відносно нових систем Ubuntu, де (як вже писали в іншому коментарі) не можна змінювати цей файл напряму. Оскільки при перезавантеженні відбувається перевірка і система перезаписує файл так, як у неї це повинно бути правильно. Сам мав таку проблему, коли пересів на сервера з SUSE Linux на Ubuntu. Але зараз підхід до налаштування мережі (з 18.04) знову змінився. Тому про старе немає сенсу говорити.… Читать далее »

Авторизация
*
*
 
Регистрация
*
*
*
*
 
Генерация пароля