Атрибуты файлов в Linux
Файловую систему (ФС) невозможно представить без такого важного её компонента, как атрибуты файлов. С технической точки зрения такое, конечно же, возможно, однако это было бы абсолютно бессмысленно. Поскольку не отвечало бы даже далеко не самым «строгим» требованиям для обеспечения безопасности, надёжности и масштабируемости. Поскольку вся работа с операционными системами Linux «завязана» на ФС. То становится очевидным то, как важно уметь её (ФС) понимать. Атрибуты файлов — это, образно выражаясь, «язык», на котором «общаются» между собой, собственно ФС и пользователи (особенно системные администраторы) систем Linux.
Что это такое?
Технически это набор из девяти основных битов. Определяющих какие из пользователей обладают правами на чтение, запись. А также запуск файлов для выполнения. Данный набор формирует код, называемый режимом доступа к файлу/каталогу. Первые три бита определяют права доступа для владельца. Следующие — для группы пользователей, к которой относится файл. и последние три бита — права доступа для всех остальных пользователей в системе. На практике это выглядит так:
Этот вывод говорит о том, что файл .mysql_history доступен для чтения и записи только его владельцу — пользователю john. О чём свидетельствуют первые три символа (rw-) в режима доступа. Символ «-», стоящий перед ними — это признак, что это файл, а не каталог, блочное устройство и т. д. Таким образом, ФС на всем понятном языке говорит, что данный файл может быть прочитан или отредактирован только его владельцем (или суперпользователем).
Существует также ещё четыре дополнительных бита. Которые определяют тип самого файла и задаются непосредственно при создании файла. С помощью команды chmod можно менять основные (и некоторые дополнительные) биты режима доступа. Сделать это может только владелец файла или суперпользователь. Просматривать атрибуты (в том числе и режимы доступа) позволяет команда ls. Таким образом, характер поведения ФС, а также распределение доступа и управление им полностью определяется атрибутами файлов. Которые хранит сама ФС — это самодостаточный и универсальный подход.
Как это работает?
Для записи кода режима доступа используется восьмеричная запись чисел. Как уже было отмечено, код доступа содержит три «триады» битов — для пользователя, группы и всех остальных, именно в таком порядке. Битам из первой триады соответствуют значения в восьмеричной записи 400, 200 и 100. Для второй триады (т. е. для группы) — 40, 20 и 10. Наконец, для третьей (все остальные) — 4, 2 и 1. В свою очередь, первому биту в каждой триаде соответствует доступ на чтение (r — «read»). Второму — на запись (w — «write») и третьему — на выполнение, т. е. x — «execute».
В традиционной модели прав доступа UNIX предполагается, что каждый пользователь «заперт» в пределах всего одной категории (триады). Это означает, что для неоднозначной ситуации применяются самые строгие права. Например, право на владение всегда определяется только битами из триады владельца. И никак и никогда группой или другими пользователями.
Установка бита чтения (r) в одной из триад (или во всех) задаёт право открывать данный файл для чтения соответствующим категориям пользователей. Наличие бита записи (w) позволяет изменять файл. При этом возможно его удаление и/или переименование файла, но только в том случае, если заданы соответствующие биты для его родительского каталога, поскольку именно в его записях хранятся имена файлов.
Установка бита запуска позволяет, собственно, запускать файл на выполнение. Такие файлы называются «исполняемыми». Исполняемых файлов существует две разновидности: бинарные — исполняемые центральным процессором, а также сценарии или скрипты, исполняемые командным интерпретатором. В последнем случае это обычный текстовый файл, но для того, чтобы интерпретатор мог определить, с кем «имеет дело», в самое начало таких файлов помещаются специальные инструкции, вроде такой:
В данном примере указывается, что файл является сценарием для выполнения интерпретатором Perl. Вместо perl может быть указан любой другой интерпретатор, например bash или sh.
Когда бит выполнения устанавливается для каталога. То это означает, что в данный каталог разрешён переход, либо разрешён доступ к файлу через данный (транзитом, так сказать) каталог. Но без получения списка подкаталогов и всего содержимого каталога. Для того, чтобы получить содержимое какого-либо каталога. Необходимо, чтобы для него вместе с битом выполнения был установлен также и бит чтения.
Специальные биты режимов доступа setuid и setgid
Очень важное значение в системах Linux имеют биты setuid (бит смены идентификатора пользователя) и setgid (бит смены идентификатора группы). Их назначение в том, чтобы помочь, в определённых ситуациях, программам получить полноценный доступ к каким-либо файлам и/или процессам. Которые по спецификации основного режима доступа недоступны пользователям, от имени которых эти программы запускаются. Битам setuid и setgid в восьмеричной записи соответствуют значения 4000 и 2000. Так что всё это значит? Дело в том, что если для какого-либо файла установлен бит setuid.То какой-либо пользователь (неважно кто) может запускать на исполнение этот файл от имени владельца этого файла. Таким образом работают такие программы как passwd, которую может использовать пользователь для смены своего пароля. Однако исполняемый файл passwd принадлежит суперпользователю root. Естественно, setuid и setgid можно устанавливать командой chmod:
Здесь первая команда устанавливает для файла settings.php бит setuid. Вторая — setgid, третья — оба этих бита сразу.
В выводе команды ls это выглядит так:
Здесь символ «s» в спецификации режима доступа. Говорит о том, что установлен бит setgid (вторая триада). Вместо него может быть символ «S», т. е. заглавная буква, которая говорит о том, что данный бит для этого файла был установлен впервые.
В контексте каталога может устанавливаться бит setgid. В этом случае всем создаваемым внутри этого каталога файлам будут назначаться идентификатор группы этого каталога. А не группы владельца файлов.
Sticky-бит
Этот дополнительный бит служит для того, чтобы внутри каталога, для которого установлен этот бит, удаление и/или переименование файлов могли производить только их владельцы или суперпользователь.
Установить sticky-бит может только суперпользователь, но обычный пользователь-владелец файла может его снять. Sticky-биту соответствует восьмеричное значение 1000, пример:
А в выводе команды ls это будет выглядеть следующим образом:
В данном выводе в спецификации режима доступа символ «T» говорит об установленном sticky-бите. Его представление в виде заглавной и строчной букв имеет то же значение, как и по аналогии с битами setuid и setgid.
В заключении стоит ещё раз отметить то, насколько важно понимать и правильно интерпретировать атрибуты файлов. От этого зависит, насколько корректно и надёжно будет функционировать вся система. Грамотное системное администрирование невозможно без понимания работы ФС, в частности того, что такое атрибуты файлов.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
linux-notes.org
Изменение атрибутов (флагов) на файлах в Unix/Linux
Сейчас расскажу как можно изменить атрибуты на файлы в Unix\Linux и приведу готовые примеры в своей статье «Изменение атрибутов (флагов) на файлах в Unix/Linux».
1. chattr
chattr — изменяет атрибуты файлов на файловых системах ext2fs, ext3, ext4 и частично на других файловых системах Linux.
Формат символьного режима: +-=[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
Рекурсивное изменение атрибутов каталогов и их содержимого.
Вывод на экран с выводом chattr и показать версию программы.
Запретить большинство сообщений об ошибках.
Вывести версию программы.
Вывести все атрибуты для всех каталогах.
Вывести все атрибуты для всех файлов.
Linux
В Linux есть утилита chattr, она может выставлять нужные флаги на файлы и папки, но все изменения проводить может только пользователь root.
Выставляем флаг который нельзя удалить (может только root):
Просмотр всех флагов для папок и файлов:
Чтобы убирать флаги i,u для всех файлов в папке:
Проверим стоит ли права, после применения команды:
Я сбросил все атрибуты в 000, нужно дял файлов теперь выставить нормальные (это 644), для этого используем:
И нужно поменять владельца сайта ( у меня кто-то сменил на пользователя root, видимо нашли уязвимость и проделали этот трюк для своих нужд), по этому, исправляем:
Иногда нужно менять еще и права на папки и файлы, я использую эту статью для этого:
выставить права на папки 755 и права на файлы 644
Если нужно больше информации о командах chattr или lsattr, то читаем мануал:
Разрешаем ядру автоматически сжимать или разжимать файл:
Игнорируем данный файл когда используем команды dump:
Запрешаем изменение бинарников:
Удалим атрибут ‘s’ с файла, но он после этого будет заполнен нулями и перезаписан на
диск:
Только добавление данных (append-only), удаление и переименование запрещено (Предотвращаем модификацию лога злоумышленником):
Если удалить файл с этим атрибутом, то он будет сохранен и пользователь может восстановить данные при необходимости:
Удостовериться что все изменения файла сразу будут записаны на диск:
FreeBSD/OpenBSD
В *BSD, данной функцией обладает утилита chflags. Приведу несколько примеров использования данной программы на freeBSD.
Чтобы выставить неудаляемый флаг (в отличии от ext это может НЕ только root):
Обо всем возможностях можно узнать в:
Утилита 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» завершена.
3 thoughts on “ Изменение атрибутов (флагов) на файлах в 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
А где файл будет сохранен? как его найти?
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.