Права доступа к файлам и директориям в Linux, часть 3

Продолжаем разговор о разграничении доступа к файлам и директориям в Linux. В первой части этой статьи мы рассмотрели основы стандартной системы разграничения доступа, во второй части — специальные права, которые могут возникать у пользователей и групп в определенных ситуациях.

Стандартная система разграничения доступа в Linux не исчерпывает всех возможных ситуаций. К примеру, нам надо дать пользователю определенные права, но нам не нужно делать его владельцем, мы не хотим включать его в ассоциированную группу (потому что не хотим давать такие права остальным членам группы), относить его к остальным пользователям системы для нас тоже не выход, т.к. он должен иметь другие права по сравнению с ними. В рамках классической системы распределения прав мы эту задачу не решим. В этом случае нам может помочь гибкая система назначения прав — ACL.

ACL (англ. Access control list — cписки контроля доступа) можно рассматривать как дополнение к стандартной системе разграничения прав доступа к файлам и каталогам. Дело в том, что обычное распределение прав в Linux подходит для отдельного компьютера (например, домашнего), которым пользуется всего пара пользователей. При объединении ПК в локальные сети мы сталкиваемся с тем, что пользователям нужны индивидуальные привилегии. Даже члены одной группы пользователей не обязательно должны иметь одни и те же права. Самым напрашивающимся примером могут быть разные отделы в организации. У разных отделов могут быть разные права доступа к файлам и каталогам в локальной сети. Но, вполне возможно, что руководителям подразделений потребуется несколько больший доступ, нежели рядовым сотрудникам.

Итак, что добавляет ACL по сравнению с уже рассмотренной системой распределения прав?

  • Можно прописать права для нескольких пользователей, а не только для владельца;
  • Можно прописать права для нескольких групп.

Есть и другие нюансы использования ACL в системе. В этой статье постараемся осветить основные из них.

Как и в Windows, в операционных системах Linux пользователь тоже может входить в несколько групп. При этом каждый пользователь обязательно входит как минимум в одну группу, которая присваивается ему при создании. Эта группа будет считаться для пользователя основной. Посмотреть свойства групп можно в файле /etc/group. Открыть его можно любым текстовым редактором хоть в терминале, хоть через графический интерфейс.

Права доступа к файлам и директориям в Linux
Содержимое файла /etc/group.

Синтаксис файла довольно прост:

имя_группы:пароль:GID:список_пользователей

Как можно догадаться, GID это числовой идентификатор группы (по аналогии с UID для пользователей). Что касается пароля, то теперь он редко хранится в файле /etc/group (пусть даже и в зашифрованном виде). Это признанно ненадежным. Символ x означает, что используется так называемый «теневой пароль», который хранится в /etc/gshadow. Впрочем, мы немного отклонились от темы.

Список входящих в группу пользователей перечисляется через запятую. Для включения пользователя в группу достаточно просто вписать его. Попробуем вписать пользователя tux в группу test. Ничего не вышло — ошибка доступа.

Права доступа к файлам и директориям в Linux

Всё дело в том, что это было сделано из-под пользователя test, который не имеет достаточных прав на редактирование файла /etc/group. Поскольку рассматриваемый файл отвечает за настройки ОС, в данном случае рекомендуется использовать пользователя root. Команда

sudo nano /etc/group

откроет файл /etc/group с необходимыми для редактирования правами. В примере здесь приведен редактор nano, но вы, естественно, можете использовать любой другой.

Права доступа к файлам и директориям в Linux

Использование учетной записи суперпользователя позволило отредактировать свойства группы.

С редактированием групп более-менее ясно. Вернемся непосредственно к ACL. Для начала разберем теорию. Списки контроля доступа могут быть двух видов: для доступа и по умолчанию. Эти два термина могут показаться сложными для понимания, но, на самом деле, всё довольно просто. Если файлу или каталогу заданы ACL, то система будет использовать их. Это называется ACL для доступа. Также возможно использование наследования прав от каталога, если тому заданы ACL. Это будет называться ACL по умолчанию. Подробнее об этом в отдельной статье.

Перейдем к редактированию прав доступа посредством ACL. Первым делом, конечно, остановимся на просмотре данных прав. Для этого используется команда getfacl. Синтаксис команды очень простой. Для просмотра прав на конкретный файл используйте

getfacl [путь_к_файлу]

Если нужно посмотреть права на все объекты в текущем каталоге, то достаточно использовать:

getfacl *

Если необходимо посмотреть ACL-свойства не только у текущего каталога, но и у его подкаталогов с их содержимым, то используйте

getfacl -R *

Ну а если вы знаете только часть имени файла, то можете попробовать команду

getfacl [путь_к_файлу]*

Это отобразит ACL для всех файлов, имя которых начинается с введенного вами.

Продолжим пример с созданным ранее файлом file_test в каталоге /home/test.

Права доступа к файлам и директориям в Linux

Команда

getfacl /home/test/file_test

выведет ACL-свойства данного файла.

В данном примере файлу file_test не заданы никакие особенные права в соответствии со списками контроля доступа. Поэтому команда getfacl вывела лишь строчки user, group и other.

Редактирование ACL осуществляется через команду setfacl (на самом деле, и getfacl, и setfacl это отдельные утилиты). Синтаксис команды выглядит следующим образом:

setfacl [опции] [ключ] [правила_доступа] [объект]

Ключ задаёт режим работы утилиты (например, модифицировать ACL-права или перезаписать их). Кроме того, существует ряд дополнительных опций. Конечно же, вы должны указать какому файлу или каталогу хотите задать ACL-права и сами эти права.

Для начала перечислим основные опции утилиты setfacl.

Опция Описание
-b Удаление всех ACL-прав, стандартные права доступа сохраняются
-k Удаление наследуемых ACL-прав
-d Установка наследуемых ACL-прав
-restore=[путь_к_файлу/имя_файла] Установка ACL-прав из специального файла, который их хранит
-R Рекурсивное назначение или удаление ACL-прав (т.е. на файлы и подкаталоги каталога)

Теперь посмотрим на часто используемые в утилите setfacl ключи. В отличие от опций, которые могут указываться, а могут и нет, ключ нужно указать в любом случае.

Ключ Описание
—set Установка ACL-прав с удалением существующих, обязательно требуется указание и стандартных прав доступа
-m Модификация указанных ACL-прав, прочие ACL-права не удаляются
-x Удаление указанных ACL-прав, стандартные права доступа не изменяются
—set [путь_к_файлу/имя_файла] Аналогично —set, права берутся из указанного файла
-M [путь_к_файлу/имя_файла] Аналогично -m, права берутся из указанного файла
-X [путь_к_файлу/имя_файла] Аналогично -x, информация об удаляемых правах берется из указанного файла

Продолжим пример с файлом file_test. Владельцем файла является пользователь test. Выше мы добавили пользователя tux в группу test, это значит, что он может пользоваться правами группы в рамках стандартной системы прав доступа Linux. Уберем его из этой группы, снова отредактировав файл /etc/group. Теперь дадим ему права через ACL.

setfacl -m u:tux:rw /home/test/file_test

Так как мы даёт права пользователю, перед его именем нужно указать u (в случае с группой это был бы символ g) и двоеточие. После имени пользователя (или группы) через двоеточие указываем права, которые хотим дать. Проверяем результат командой getfacl.

Права доступа к файлам и директориям в Linux

Мы видим, что добавилась строка, указывающая права для пользователя tux. Аналогичным образом мы могли бы добавить права для какой-нибудь группы пользователей.

Следующей интересной особенностью ACL является использование так называемой маски прав. Маска прав это максимально возможные права для пользователей и групп (не касается владельца). По умолчанию, если маска не задана явно, она является совокупностью максимальных прав пользователей и групп. Если маску задать, она будет служить своего рода ограничителем. Для лучшего понимания перейдем к практике. Командой

setfacl -m m:r /home/test/file_test

мы установим маску только на чтение. Это значит, что пользователь tux и ассоциированная группа не будут иметь доступ на запись, хотя он им и выставлен. Для лучшей информированность утилита getfacl предоставляет комментарии по фактически предоставляемым правам.

Права доступа к файлам и директориям в Linux

В нашем случае пользователю и ассоциированной группе даны права на чтение и запись (r и w), но по факту им дано только право на чтение, так как право на запись не предусмотрено маской.

Говоря о маске доступа, следует сделать отступление и отдельно упомянуть о правах на удаление. Дело в том, что, в отличие от прочих прав, права на удаление задаются не в свойствах самого объекта, а в свойствах каталога, в котором он находится.

В следующей статье поговорим о таких вещах, как наследование ACL-прав, и о том, какие операции над файлами и папками с ACL можно совершать.

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

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