Изменение атрибутов (флагов) на файлах в Unix/Linux

Изменение атрибутов (флагов) на файлах в 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:

  1. badblocks — используется для поиска плохих блоков;
  2. chattr — изменяет атрибуты файлов на файловой системе ext2fs;
  3. debugfs — используется для ручного просмотра и изменения внутренней структуры файловой системы;
  4. dumpe2fs — печатает superblock and block group information;
  5. e2fsck — fsck-программа, проверяющая и корректирующая несоответствия;
  6. e2image — записывает критические данные файловой системы в файл;
  7. e2label — используется для просмотра и изменения метки файловой системы;
  8. lsattr — печатает список атрибутов файловой системы;
  9. mke2fs — используется для создания файловых систем ext2, ext3 и ext4;
  10. mklost+found — создаёт каталог lost+found и выделяет для него блоки дискового пространства;
  11. resize2fs — используется для изменения пространства, выделенного под файловые системы ext2, ext3 and ext4;
  12. tune2fs — используется для модифицирования параметров файловой системы.
  13. Многие из этих утилит основаны на библиотеке libext2fs.

Тема «Изменение атрибутов (флагов) на файлах в Unix/Linux» завершена.

3 thoughts on “Изменение атрибутов (флагов) на файлах в Unix/Linux

  1. Спасибо за статью, а можно вопрос?

    Вот вывод команды 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

  2. Если удалить файл с этим атрибутом, то он будет сохранен и пользователь может восстановить данные при необходимости
    # chattr +u my_test_file

    А где файл будет сохранен? как его найти?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.