Изменение атрибутов (флагов) на файлах в Unix/Linux
Сейчас расскажу как можно изменить атрибуты на файлы в Unix\Linux и приведу готовые примеры в своей статье «Изменение атрибутов (флагов) на файлах в Unix/Linux».
1. chattr
chattr — изменяет атрибуты файлов на файловых системах ext2fs, ext3, ext4 и частично на других файловых системах Linux.
# chattr [ -RV ] [ -v версия ] [ атрибуты ] файлы
Формат символьного режима: +-=[acdeijstuACDST].
«+» обозначает добавление указанных атрибутов к существующим;
«-» обозначает их снятие;
«=» обозначает установку только этих атрибутов файлам.
Символы «acdeijstuACDST» указывают на новые атрибуты файлов, некоторые атрибуты может назначить только суперпользователь (root):
- Не обновлять время последнего доступа к файлу atime (A)
- Использовать синхронное обновление (S)
- Использовать синхронное обновление каталогов (D)
- Только добавление к файлу (a)
- Сжатый (c)
- Не архивировать (d)
- Неизменяемый (i)
- Безопасное удаление (s)
- Вершина иерархического дерева (T)
- Запрет слияния в конце файла (t)
- Неудаляемый (u)
- Нет копирования при записи (C)
- Журналирование данных (j)
- extent format (e)
2. lsattr
Формат символьного режима:
- Огромный файл (h),
- Ошибки сжатия (E),
- Индексированный каталог (I),
- Сжатие прямого доступа(X),
- Сжатый грязный файл (Z).
Опции
-R
Рекурсивное изменение атрибутов каталогов и их содержимого.
-V
Вывод на экран с выводом chattr и показать версию программы.
-f
Запретить большинство сообщений об ошибках.
-v
Вывести версию программы.
-d
Вывести все атрибуты для всех каталогах.
-a
Вывести все атрибуты для всех файлов.
Примеры.
Linux
В Linux есть утилита chattr, она может выставлять нужные флаги на файлы и папки, но все изменения проводить может только пользователь root.
Выставляем флаг который нельзя удалить (может только root):
# chattr +i /tmp/test
Просмотр всех флагов для папок и файлов:
$ lsattr -a /home/captain/public_html/ ----i------------e- test -------------e- ./wp-login.php -------------e- ./readme.html -i----u------e- ./wp-settings.php ................................
Чтобы убирать флаги i,u для всех файлов в папке:
# chattr -iau /home/captain/public_html/* # chattr -iau /home/captain/public_html/.*
Проверим стоит ли права, после применения команды:
$ lsattr -a
или
lsattr `find .`|grep -- "-u--ia-------"
Я сбросил все атрибуты в 000, нужно дял файлов теперь выставить нормальные (это 644), для этого используем:
# chmod 644 `find . -perm 000`
И нужно поменять владельца сайта ( у меня кто-то сменил на пользователя root, видимо нашли уязвимость и проделали этот трюк для своих нужд), по этому, исправляем:
# chown -R captain:captain `find /home/ -user root`
или
$ chown -R captain:captain /home/homewhol/public_html/
Иногда нужно менять еще и права на папки и файлы, я использую эту статью для этого:
выставить права на папки 755 и права на файлы 644
Если нужно больше информации о командах chattr или lsattr, то читаем мануал:
$ man chattr $ man lsattr
Разрешаем ядру автоматически сжимать или разжимать файл:
# chattr +c my_test_file1
Игнорируем данный файл когда используем команды dump:
# chattr +d my_test_file1
Запрешаем изменение бинарников:
# chattr -R +i /bin /sbin /usr/bin /usr/sbin
Удалим атрибут ‘s’ с файла, но он после этого будет заполнен нулями и перезаписан на
диск:
# chattr +s my_test_file1
Только добавление данных (append-only), удаление и переименование запрещено (Предотвращаем модификацию лога злоумышленником):
# chattr +a /var/log/secure
Если удалить файл с этим атрибутом, то он будет сохранен и пользователь может восстановить данные при необходимости:
# chattr +u my_test_file
Удостовериться что все изменения файла сразу будут записаны на диск:
# chattr +S my_test_file1
FreeBSD/OpenBSD
В *BSD, данной функцией обладает утилита chflags. Приведу несколько примеров использования данной программы на freeBSD.
Чтобы выставить неудаляемый флаг (в отличии от ext это может НЕ только root):
$ chflags uunlnk /tmp/test
Проосмотреть флаги:
$ ls -lao test -rw-r--r-- 1 skeletor wheel uunlnk 0 Jul 6 10:56 test
Чтобы убрать флаг:
$ chflags nouunlnk /tmp/test
Обо всем возможностях можно узнать в:
$ man chflags
Утилита chattr (lsattr) входят в пакет утилит — e2fsprogs (иногда называемая e2fs programs) — это набор программ для поддержания файловых систем (ext2, ext3 и ext4).
Что входит в данный пакет утилиты e2fsprogs:
- badblocks — используется для поиска плохих блоков;
- chattr — изменяет атрибуты файлов на файловой системе ext2fs;
- debugfs — используется для ручного просмотра и изменения внутренней структуры файловой системы;
- dumpe2fs — печатает superblock and block group information;
- e2fsck — fsck-программа, проверяющая и корректирующая несоответствия;
- e2image — записывает критические данные файловой системы в файл;
- e2label — используется для просмотра и изменения метки файловой системы;
- lsattr — печатает список атрибутов файловой системы;
- mke2fs — используется для создания файловых систем ext2, ext3 и ext4;
- mklost+found — создаёт каталог lost+found и выделяет для него блоки дискового пространства;
- resize2fs — используется для изменения пространства, выделенного под файловые системы ext2, ext3 and ext4;
- tune2fs — используется для модифицирования параметров файловой системы.
- Многие из этих утилит основаны на библиотеке libext2fs.
Тема «Изменение атрибутов (флагов) на файлах в Unix/Linux» завершена.
Спасибо за статью, а можно вопрос?
Вот вывод команды ls
-rwxrwxrwx+ 1 user User 304227 окт 5 09:18 Копия Агентское
Что означает «+» после «rwxrwxrwx» ? Нигде не могу найти информации
Это расширенный атрибут, который устанавливается:
На MacOS:
# chmod -R +a «group:Your_Group_Name allow read,write,append,readattr,writeattr,readextattr,writeextattr» /Path/to/dir
# chmod -R +a «user:Your_User_Name allow read,write,append,readattr,writeattr,readextattr,writeextattr» /Path/to/dir
На Linux:
$ setfacl -m u:Your_User_Name:rw,u:some_user:r,g::r,m::rw /Path/to/dir
Если удалить файл с этим атрибутом, то он будет сохранен и пользователь может восстановить данные при необходимости
# chattr +u my_test_file
А где файл будет сохранен? как его найти?