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

Теперь вы можете удалить тестовый каталог со всеми подкаталогами.