Бит (bit) неизменяемости (immutable) файла (ака "immutable bit") может быть назначен файлу, который размещён в расширенной файловой системе (Ext3, Ext4, Extended File System), для его защиты от изменений. "immutable bit" может быть добавлен к атрибутам файла с помощью программы chattr и только супер-пользователем.
Какие последствия установки immutable bit?
После того, как файлу будет назначен атрибут immutable, над этим файлом будет запрещено:
- Модификация;
- Переименование;
- Удаление;
- Невозможность создавать мягкие (ака soft, symlink, символические) и жесткие (hard) ссылки.
Как установить immutable bit в Linux?
Установка атрибута immutable осуществляется следующим образом chattr +i /path/to/filename
. Например мы можем защитить от записи файл /etc/shadow:
$ chattr +i /etc/shadow
После этого войдём с учетной записи обычного пользователя (скажем, пользователя test) и попробуем сменить пароль:
$ passwd Changing password for user test. Changing password for test (current) UNIX password: OLDPASSWD New password: NEWPASSWD Retype new password: NEWPASSWD passwd: all authentication tokens updated successfully.
Как видим в итоге мы получили сообщение о якобы успешной смене пароля, однако если мы выйдем и снова попробуем войти с помощью уч. записи нашего пользователя test, то обнаружим, что NEWPASSWD не принимается и для входа нам нужно будет использовать OLDPASSWD. Проверить, защищен ли файл от изменений с помощью атрибута immutable можно с помощью программы lsattr:
$ lsattr /etc/shadow ----i--------e-- /etc/shadow
Нужно знать, что если файл /etc/shadow имеет атрибут immutable, то даже пользователь root не сможет изменять пароль! Удалить атрибут immutable можно всё той же программы chattr:
$ chattr -i /etc/shadow $ lsattr /etc/shadow -------------e-- /etc/shadow
Как установить immutable bit в BSD системах?
В операционный системах BSD типа аттрибут immutable устанавливается с помощью chflags:
$ chflags schg /path/to/filename
Удаление immutable bit выполняется следующим образом:
$ chflags noschg /path/to/filename
Какие файлы защитить с помощью immutable bit?
Например, в секции 10.5 Genius/Paranoia Ideas — what you could do (ака "Гениальные/Параноидальные идеи - что я должен сделать"), предлагается установить immutable bit на файлы каталогов /bin, /sbin, /usr/bin, /usr/sbin, /usr/lib, но делается оговорка о том что, перед обновлением системы с помощью apt-get update
immutable bit должен быть снят.
Так справедливо будет рекурсивное добавление immutable bit к таким файлам и директориям:
$ chattr -R +i /etc/passwd /etc/shadow /etc/group /etc/apt /bin /sbin /usr/bin /usr/sbin /usr/lib
Это сможет полностью предотвратить или же как минимум сделать максимально сложным ДДОС атаки или внедрение различных вредоносных программ, которые как правило пишут себя в упомянутые выше директории. Разумеется, что перед обновлением или установкой/компиляцией нового ПО нам потребуется снять immutable bit:
$ chattr -R -i /etc/passwd /etc/shadow /etc/group /etc/apt /bin /sbin /usr/bin /usr/sbin /usr/lib
При использовании chattr и lsattr к символьным ссылкам мы можем получить предупреждения:
chattr: Неподдерживаемая операция while reading flags on /bin/lsmod lsattr: Неподдерживаемая операция While reading flags on /bin/lsmod lsattr: Неприменимый к данному устройству ioctl While reading flags on /run
Но, о них не стоит беспокоиться, их можно просто игнорировать ибо chattr и lsattr применимы только к файлам.
В общем immutable bit может быть установлен на любые файлы, безопасность которых администратор посчитает критически важным условием, - это также могут быть файлы резервных копий каталога /etc, файлы конфигурации РНР или веб-сервера:
$ chattr -R +i /etc/apache2 /etc/php5 /etc/mysql /etc/phpmyadmin