chattr (change attribute) команда в Linux – это мощный инструмент, используемый для изменения атрибутов файлов в файловой системе ext2, ext3 или ext4. Она позволяет пользователям устанавливать определенные атрибуты, которые контролируют доступ к файлам и их изменение. Например, опция +i может сделать файл неизменяемым, то есть его нельзя изменить, удалить или переименовать даже пользователю root, пока атрибут immutable не будет снят. Другие атрибуты включают +a, который позволяет открывать файл только в режиме добавления, и +c, который помечает файл для сжатия. Эта команда особенно полезна для системных администраторов, которым необходимо обеспечить строгий контроль доступа и защитить важные системные файлы от случайных или злонамеренных изменений. Команду chattr следует использовать с осторожностью, так как неправильное применение может ограничить доступ к файлам нежелательным образом.
Предварительные условия
- Сервер под управлением операционной системы Linux.
- На сервере настроен пароль root.
Основной синтаксис
Ниже приведен основной синтаксис команды chattr:
chattr [OPTIONS] [OPERATOR][ATTRIBUTES] FILE
Краткое объяснение каждой опции приведено ниже:
- +: Используется для добавления определенных атрибутов к файлу.
- -: Используется для удаления определенных атрибутов из файла.
- =: Используется для установки указанных атрибутов в качестве единственных атрибутов.
- a: Можно открыть только в режиме добавления для записи.
- A: Запись atime не обновляется.
- c: Автоматически сжимает файл.
- i: Защитите свой файл от случайного удаления.
- S: Изменения файлов записываются на диск синхронно.
Защита файла от случайного удаления
Защита важных файлов очень важна для любого системного администратора. Вы можете использовать команду chattr для защиты файлов, чтобы любой пользователь не мог их удалить, переименовать или изменить.
Для лучшего понимания создайте каталог с именем dir1 и файл с именем file1 с помощью следующей команды:
mkdir dir1 touch file1
Затем выведите атрибуты файлов file1 и dir1 с помощью следующей команды:
ls -l
Вывод:
drwxr-xr-x 2 root root 4096 May 3 11:56 dir1 -rw-r--r-- 1 root root 0 May 3 11:56 file1
Далее установите флаги +i на dir1 и file1, чтобы никто не смог удалить файл.
chattr +i dir1 chattr +i file1
Далее проверьте атрибут с помощью следующей команды:
ls -l
Выходные данные:
drwxr-xr-x 2 root root 4096 May 3 11:56 dir1 -rw-r--r-- 1 root root 0 May 3 11:56 file1
Теперь попробуйте удалить файл и каталог:
rm -rf file1 dir1
Вывод:
rm: cannot remove ‘file1’: Operation not permitted rm: cannot remove ‘dir1’: Operation not permitted
Теперь попробуйте переименовать файл:
mv file1 file2
Выход:
mv: cannot move ‘file1’ to ‘file2’: Operation not permitted
Теперь попробуйте изменить разрешение файла:
chmod 777 file1
Вывод:
chmod: changing permissions of ‘file1’: Operation not permitted
Как сбросить атрибуты для файлов
Вы также можете использовать команду chattr, чтобы сбросить атрибут файла, который мы установили в предыдущем шаге. Таким образом, любой человек сможет изменять и удалять файл.
Вы можете использовать флаг -i, чтобы удалить атрибут из файла и каталога:
chattr -i file1 dir1
Теперь вы можете проверить состояние файла и каталога с помощью следующей команды:
lsattr
Вывод:
-------------e-- ./dir1 -------------e-- ./file1
Разрешить добавлять данные без изменения существующих данных в файле
Если вы хотите разрешить всем пользователям только добавлять данные без модификации или изменения существующих данных. Тогда вы можете использовать флаг +a для файла.
Давайте создадим новый файл с некоторым содержимым:
echo "Hi How Are You" > newfile.txt
Затем установим для файла атрибут +a:
chattr +a newfile.txt
Теперь попробуйте заменить уже существующий контент:
echo "I am replacing" > newfile.txt
Вы должны получить следующую ошибку:
bash: newfile.txt: Operation not permitted
Теперь попробуйте добавить новое содержимое в существующий файл:
echo "This is new content" >> newfile.txt
Теперь проверьте содержимое файла:
cat newfile.txt
Вывод:
Hi How Are You This is new content
Рекурсивная защита каталогов
Вы можете использовать флаг -R вместе с +i для рекурсивной защиты каталога и подкаталогов.
Сначала создайте каталог и подкаталоги с помощью следующей команды:
mkdir -p test/dir1/dir2 mkdir -p test/dir3/dir4 mkdir -p test/dir5/dir6
Теперь защитите тестовый каталог и все подкаталоги с помощью следующей команды:
chattr -R +i test
Теперь попробуйте удалить тестовый каталог со всеми подкаталогами:
rm -rf test/
Вы должны получить следующую ошибку:
rm: cannot remove ‘test/dir1/dir2’: Permission denied rm: cannot remove ‘test/dir5/dir6’: Permission denied rm: cannot remove ‘test/dir3/dir4’: Permission denied
Теперь сбросьте атрибут из тестового каталога с помощью следующей команды:
chattr -R -i test
Теперь вы можете удалить тестовый каталог со всеми подкаталогами.
Заключение
В этом руководстве вы узнали, как защитить файлы и каталоги с помощью команды chattr. Надеюсь, это поможет вам защитить важные файлы конфигурации.