The чаттр Команда (изменить атрибут) в Linux — это мощный инструмент, используемый для изменения атрибутов файлов в файловой системе ext2, ext3 или ext4. Она позволяет пользователям устанавливать определенные атрибуты, которые управляют доступом к файлам и их изменением. Например, опция +i может сделать файл неизменяемым, то есть он не может быть изменен, удален или переименован даже пользователем root, пока не будет удален атрибут неизменяемости. Другие атрибуты включают +a, который позволяет открывать файл только в режиме добавления, и +c, который помечает файл для сжатия. Эта команда особенно полезна для системных администраторов, которым необходимо обеспечить строгий контроль доступа и защитить критические системные файлы от случайных или вредоносных изменений. Команду chattr следует использовать с осторожностью, так как неправильное использование может ограничить доступ к файлам непреднамеренными способами.
Базовый синтаксис
Базовый синтаксис команды chattr показан ниже:
chattr [OPTIONS] [OPERATOR][ATTRIBUTES] FILE
Краткое описание каждого варианта приведено ниже:
- +: Используется для добавления определенных атрибутов в файл.
- -: Используется для удаления определенных атрибутов из файла.
- «=» Используется для установки указанных атрибутов как единственных атрибутов.
- а: Может быть открыт только в режиме добавления для записи.
- А: Запись atime не обновляется.
- с: Файл будет автоматически сжат.
- я: Защитите свой файл от случайного удаления.
- С: Изменения файлов синхронно записываются на диск.
Защита файла от случайного удаления
Защита важных файлов очень важна для любого системного администратора. Вы можете использовать команду 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
Теперь вы можете удалить тестовый каталог со всеми подкаталогами.