Как использовать команду chattr в Linux
Опубликовано: 2022-06-28Наряду с обычными разрешениями на чтение, запись и выполнение файлы Linux имеют еще один набор атрибутов, управляющих другими характеристиками файла. Вот как их увидеть и изменить.
Разрешения и атрибуты
В Linux кто может получить доступ к файлу и что они могут с ним делать, контролируется ориентированным на пользователя набором разрешений . Независимо от того, можете ли вы читать содержимое файла, записывать новые данные в файл или выполнять файл, если это сценарий или программа, все регулируется этим набором разрешений. Разрешения применяются к файлу, но определяют ограничения и возможности для разных категорий пользователей.
Существуют разрешения для владельца файла, для группы файла и для других — то есть пользователей, не входящих в первые две категории. Вы можете использовать команду ls
с параметром -l
(длинный список), чтобы увидеть права доступа к файлу или каталогу.
Чтобы изменить разрешения, вы используете команду chmod
. По крайней мере, вы можете, если у вас есть права на запись в файл или если вы являетесь пользователем root.
Мы видим, что права доступа к файлам ориентированы на пользователя, потому что они предоставляют или удаляют разрешения на уровне пользователя. Напротив, атрибуты файла ориентированы на файловую систему. Как и разрешения, они устанавливаются для файла или каталога. Но как только они установлены, они одинаковы для всех пользователей.
Атрибуты — это отдельная коллекция настроек от разрешений. Атрибуты управляют такими характеристиками, как неизменяемость и другие действия на уровне файловой системы. Чтобы увидеть атрибуты файла или каталога, мы используем команду lsattr
. Для установки атрибутов мы используем команду chattr
.
Разрешения и атрибуты хранятся внутри инодов . Инод — это структура файловой системы, которая содержит информацию об объектах файловой системы, таких как файлы и каталоги. Местоположение файла на жестком диске, дата его создания, разрешения и атрибуты хранятся в его индексном узле.
Поскольку разные файловые системы имеют разные базовые структуры и возможности, некоторые файловые системы могут вести себя по-разному или полностью игнорировать атрибуты. В этой статье мы используем ext4
, которая является файловой системой по умолчанию для многих дистрибутивов Linux.
Просмотр атрибутов файла
Команды chattr
и lsattr
уже присутствуют на вашем компьютере, поэтому ничего устанавливать не нужно.
Чтобы проверить атрибуты файлов в текущем каталоге, используйте lsattr
:
лсатр
Пунктирные линии — это заполнители для атрибутов, которые не установлены. Единственным установленным атрибутом является атрибут e
(extents). Это показывает, что индексные дескрипторы файловой системы используют или будут использовать, если потребуется, экстенты для указания на все части файла на жестком диске.
Если файл хранится в одной непрерывной последовательности блоков жесткого диска, его индексный дескриптор должен записывать только первый и последний блоки, используемые для хранения файла. Если файл фрагментирован, индексный дескриптор должен записать номер первого и последнего блока каждой части файла. Эти пары номеров блоков жесткого диска называются экстентами.
Это список наиболее часто используемых атрибутов.
- a : только добавление. К файлу с этим атрибутом можно только добавить. В него все еще можно записать, но только в конец файла. Невозможно перезаписать какие-либо существующие данные в файле.
- c : Сжатый. Файл автоматически сжимается на жестком диске и распаковывается при чтении. Данные, записываемые в файлы, перед записью на жесткий диск сжимаются.
- О : Нет обновлений
atime
.atime
— это значение в индексном узле, которое записывает время последнего доступа к файлу. - C : Без копирования при записи. Если два процесса запрашивают доступ к файлу, им могут быть даны указатели на один и тот же файл. Им предоставляется собственная уникальная копия файла только в том случае, если они пытаются записать в файл, что делает его уникальным для этого процесса.
- д : Нет дампа. Команда Linux
dump
используется для записи копий целых файловых систем на резервный носитель. Этот атрибут заставляетdump
игнорировать файл. Он исключен из резервной копии. - D : Синхронные обновления каталога. Когда этот атрибут включен для каталога, все изменения в этом каталоге записываются синхронно, т. е. немедленно, на жесткий диск. Операции с данными могут быть буферизованы.
- e : Формат экстента. Атрибут
e
указывает, что файловая система использует экстенты для сопоставления местоположения файла на жестком диске. Вы не можете изменить это с помощьюchattr
. Это функция работы файловой системы. - я : неизменяемый. Неизменяемый файл нельзя модифицировать, в том числе переименовывать и удалять. Пользователь root — единственный человек, который может устанавливать или сбрасывать этот атрибут.
- s : Безопасное удаление. Когда файл с этим набором атрибутов удаляется, блоки жесткого диска, содержащие данные файла, перезаписываются байтами, содержащими нули. Обратите внимание, что это не поддерживается файловой системой
ext4
. - S : Синхронные обновления. Изменения в файле с установленным атрибутом
S
записываются в файл синхронно. - u : удаление файла с установленным атрибутом
u
приводит к созданию копии файла. Это может быть полезно для восстановления файла, если файл был удален по ошибке.
Изменение атрибутов файла
Команда chattr
позволяет нам изменить атрибуты файла или каталога. Мы можем использовать операторы +
(установить) и -
(сбросить) для применения или удаления атрибута, аналогично команде chmod
и разрешениям.
Команда chattr
также имеет оператор =
(только установка). Это устанавливает атрибуты файла или каталога только для атрибутов, указанных в команде. То есть все атрибуты, не указанные в командной строке, сбрасываются .
Установка атрибута «Только добавление»
Давайте установим атрибут только для добавления в текстовый файл и посмотрим, как это повлияет на то, что мы можем делать с файлом.
sudo chattr +текстовый файл.txt
Мы можем проверить, установлен ли бит только для добавления, используя lsattr
:
lsattr текстовый файл.txt
Буква « a
» означает, что атрибут установлен. Попробуем перезаписать файл. Перенаправление вывода в файл с помощью одной угловой скобки « >
» заменяет все содержимое в файле перенаправленным выводом.
Мы предварительно загрузили текстовый файл с текстом-заполнителем lorem ipsum .
текстовый файл кота.txt
Мы перенаправим вывод ls
в файл:
ls -l > текстовый файл.txt
sudo ls -l > текстовый файл.txt
Операция не разрешена, даже если мы используем команду sudo
.
Если мы используем две угловые скобки « >>
» для перенаправления вывода, он добавляется к существующим данным в файле. Это должно быть приемлемо для нашего текстового файла только для добавления.
sudo ls -l >> текстовый файл.txt
Мы вернулись в командную строку без каких-либо сообщений об ошибках. Давайте заглянем внутрь файла, чтобы увидеть, что произошло.
текстовый файл кота.txt
Перенаправленный вывод ls
добавлен в конец файла.
Хотя мы можем добавлять данные в файл, это единственное изменение, которое мы можем в него внести. Мы не можем удалить его и не можем получить root права.
текстовый файл rm.txt
sudo rm text-file.txt
Установка неизменяемого атрибута
Если вы хотите защитить файл, в который никогда не будут добавляться новые данные, вы можете установить неизменяемый атрибут. Это предотвращает все изменения в файле, включая добавление данных.
sudo chattr +i второй файл.txt
lsattr второй файл.txt
Мы видим « i
», указывающий на то, что неизменяемый атрибут установлен. Сделав наш файл неизменяемым, даже пользователь root не сможет его переименовать ( mv
), удалить ( rm
) или добавить в него данные.
sudo mv второй файл.txt новое имя.txt
sudo rm второй файл.txt
sudo ls -l >> второй файл.txt
Не полагайтесь на безопасное удаление на ext4
Как мы уже отмечали, некоторые операционные системы не поддерживают все атрибуты. Атрибут безопасного удаления не поддерживается файловыми системами семейства ext
, включая ext4
. Не полагайтесь на это для безопасного удаления файлов.
Легко видеть, что это не работает в ext4
. Мы установим атрибут s
(безопасное удаление) для текстового файла.
sudo chattr +s третий файл.txt
Что мы собираемся сделать, так это узнать индексный дескриптор, содержащий метаданные об этом файле. Индекс содержит первый блок жесткого диска, занятый файлом. Файл содержит текст-заполнитель lorem ipsum .
Мы прочитаем этот блок непосредственно с жесткого диска, чтобы убедиться, что мы читаем правильное расположение на жестком диске. Мы удалим файл, а затем еще раз прочитаем тот же блок жесткого погружения. Если атрибут безопасного удаления соблюдается, мы должны читать обнуленные байты.
Мы можем найти индекс файла с помощью команды hdparm
с параметром --fibmap
(карта файловых блоков).
sudo hdparm --fibmap третий файл.txt
Первый блок жесткого диска — 18100656. Мы воспользуемся командой dd
, чтобы прочитать его.
Варианты:
- if=/dev/sda : чтение с первого жесткого диска на этом компьютере.
- bs=512 : Используйте размер блока жесткого диска 512 байт.
- skip=18100656 : пропустить все блоки до блока 18100656. Другими словами, начать чтение с блока 18100656.
- count=1 : прочитать один блок данных.
sudo dd if=/dev/sda bs=512 skip=18100656 count=1
Как и ожидалось, мы видим текст-заполнитель lorem ipsum . Мы читаем правильный блок на жестком диске.
Теперь мы удалим файл.
rm третий файл.txt
Если мы прочитаем тот же блок жесткого диска, мы все равно сможем увидеть данные.
sudo dd if=/dev/sda bs=512 skip=18100656 count=1
Опять же, не полагайтесь на это для безопасного удаления на ext4
. Существуют лучшие методы удаления файлов, чтобы их нельзя было восстановить.
СВЯЗАННЫЕ С: Как безопасно удалить файлы в Linux
Полезно, но с осторожностью
Установка атрибутов файлов может сделать их невосприимчивыми к случайным катастрофам. Если вы не можете удалить или перезаписать файл, это довольно безопасно.
Вы можете подумать, что хотели бы применить их к системным файлам и сделать вашу установку Linux более безопасной. Но системные файлы необходимо периодически заменять по мере выпуска обновлений или применения обновлений. По этой причине безопаснее использовать эти атрибуты только для файлов, созданных вами.
СВЯЗАННЫЕ С: Как защитить свой Linux-сервер с помощью fail2ban