Статья полностью переписана и расширена: добавлены современные примеры (Ubuntu 24.04, Debian 12, Fedora 41), сравнительная таблица, реальные кейсы 2024–2025 годов, подробный FAQ и перелинковка.
Быстрый ответ
Самый надёжный и простой способ защитить файл или папку от удаления даже пользователем root это просто установить атрибут immutable. Сделать это можно с помощью команды:
sudo chattr +i /path/to/important/file.conf
После этого файл становится полностью неизменяемым: его нельзя удалить, переименовать, перезаписать или изменить права и самое главное, даже root не сможет.
Проверить атрибуты:
lsattr /path/to/important/file.conf
Снять защиту (когда понадобится):
sudo chattr -i /path/to/important/file.conf
Почему rm работает даже на файлах root
В Linux права доступа (chmod/chown) и владелец файла определяют, кто может читать/писать/выполнять. Но удаление файла это операция на уровне директории, а не самого файла.
Если у пользователя есть право на запись (w) в родительской директории, тогда он легко может удалить любой файл внутри неё, даже если сам файл принадлежит root и имеет 444 права.
Именно поэтому классические команды chmod 444 или chown root:root не спасают от случайного или злонамеренного rm -rf.

Способ №1, chattr +i (immutable) это самый надёжный способ
Атрибут immutable (+i) делает файл или директорию полностью защищённым от любых изменений на уровне файловой системы.
Команды:
Установить защиту sudo
chattr +i /etc/resolv.conf
Установить на всю директорию рекурсивно
sudo chattr -R +i /etc/systemd/network/
Проверить
lsattr -R /etc/systemd/network/
Что блокирует immutable:
- удаление (rm)
- переименование (mv)
- изменение содержимого (echo >, vi, sed -i)
- изменение прав (chmod)
- изменение владельца (chown)
- создание жёстких ссылок (ln)
Ограничения:
- не работает на tmpfs, proc, sysfs
- не защищает от физического доступа к диску (dd, загрузка с live-USB)
- нельзя применить к открытым дескрипторам (если процесс уже держит файл открытым)
Способ №2, sticky bit (t) на директории
Подходит, когда нужно запретить удаление чужих файлов внутри общей директории (классический пример /tmp).
sudo chmod +t /path/to/shared/dir
Символ t в правах директории:
drwxrwxrwt 2 root root 4096 Feb 28 16:40 /tmp
Пользователь может удалить только свои файлы внутри такой директории.
Способ №3, ACL (Access Control Lists)
Более гибкий, но сложный вариант. Можно дать конкретному пользователю/группе запрет на удаление.
# Запретить пользователю nazario удалять файл
sudo setfacl -m u:nazario:--- /important/file.conf
# Запретить группе admins
sudo setfacl -m g:admins:--- /important/file.conf
Проверить ACL:
getfacl /important/file.conf
Сравнительная таблица способов защиты
| Способ | Защищает от удаления | Защищает от изменения содержимого | Защищает от изменения прав | Сложность | Поддержка файловых систем |
|---|---|---|---|---|---|
| chattr +i | Да (полностью) | Да | Да | Низкая | ext4, xfs, btrfs |
| sticky bit (t) | Да (только чужие файлы) | Нет | Нет | Низкая | Все POSIX |
| ACL | Да (выборочно) | Да (выборочно) | Да (выборочно) | Средняя | ext4, xfs, btrfs |
| chmod 000 / 444 | Нет | Частично | Нет | Низкая | Все |
Реальные кейсы и самые частые ошибки
- Админ случайно выполнил rm -rf /etc после опечатки в пути → immutable на /etc/resolv.conf и /etc/hosts спасает от катастрофы
- На сервере с shared хостингом пользователь удалил чужой файл в /var/www → sticky bit решает проблему
- Забыли снять +i перед обновлением конфига → apt/yum/dnf падает с ошибкой EPERM
- Пытались защитить /var/log с помощью +i → journald и rsyslog не могут писать → система «зависает»
Как проверить и снять защиту
Посмотреть все атрибуты
lsattr -a /path/to/file
Снять immutable рекурсивно
sudo chattr -R -i /protected/dir/
1. Можно ли защитить файл от root?
2. chattr +i работает на всех файловых системах?
3. Что делать, если забыл снять immutable перед обновлением?
4. Можно ли защитить всю папку /etc?
5. sticky bit защищает от root?
6. Есть ли аналог chattr +i в Windows?
Заключение
Самый надёжный и простой способ защитить важный файл от случайного или злонамеренного удаления даже пользователем root, то это команда chattr +i. Она делает файл неизменяемым на уровне файловой системы.
Для общих директорий используйте sticky bit, для выборочного доступа следует использовать ACL. Главное правило: защищайте только то, что действительно критично, но всегда оставляйте возможность быстро снять защиту.
Полезные материалы по теме:
Понравилась статья?
Помогите Setiwik.ru создавать больше глубоких обзоров и новостей. Один клик и ваш вклад помогает держать серверы включёнными и авторов мотивированными!
Поддержать проектСпасибо, что вы с нами!




