К сожалению, стандартные средства организации прав доступа к файлам в UNIX-подобных операционных системах зачастую не удовлетворяют требованиям некоторых системных администраторов. Проблема заключается в том, что определение прав доступа к файлам сводится к установке девяти битов, с помощью которых можно задать права доступа для владельца файла, группы, к которой принадлежит владелец файла, а также для всех остальных. Часто необходимо настроить доступ к файлу достаточно сложным образом – допустим, три человека из трех разных групп имеют право делать с файлом все что угодно, десять человек из других групп могут открывать файл на чтение, а еще десять – только выполнять. Для всех других пользователей доступ к этому файлу необходимо запретить. Устроить нечто подобное стандартными средствами Linux весьма нетривиальная задача. В такой ситуации для решения данной проблемы можно воспользоваться Linux ACLs (Access Control Lists, списки контроля доступа) – версией POSIX ACLs для Linux. Linux ACLs – это набор патчей для ядра операционной системы и программ для работы с файловой системой и несколько утилит, дающих возможность устанавливать права доступа к файлам не только для пользователя-владельца и группы-владельца файла, но и для любого пользователя или группы.
Linux ACLs использует расширенные атрибуты (Extended Attributes) для хранения данных о правах доступа к файлам пользователей и групп. Расширенные атрибуты – это пара имя/значение, привязанная к определенному файлу.
Список расширенного контроля доступа существует для каждого inode и состоит из шести компонентов. Первые три являются копией стандартных прав доступа к файлу. Они содержатся в единственном экземпляре в ACL и есть у каждого файла в системе:
• ACL_USER_OBJ – режим доступа к файлу пользователя-владельца;
• ACL_GROUP_OBJ – режим доступа к файлу группы-владельца;
• ACL_OTHER – режим доступа к файлу остальных пользователей.
Следующие два компонента устанавливаются для каждого файла в отдельности и могут присутствовать в ACL в нескольких экземплярах:
• ACL_USER – содержит UID и режим доступа к файлу пользователя, которому установлены права, отличные от основных. На каждого пользователя со своими правами на данный файл хранится отдельная запись. Не может существовать более одной записи на одного и того же пользователя;
• ACL_GROUP – то же самое, что и ACLUSER, но для группы пользователей;
• ACL_MASK – маска действующих прав доступа для расширенного режима.
При установке дополнительных прав доступа присваивается значение и элементу ACLMASK.
Каталоги также могут иметь список контроля доступа по умолчанию. В отличие от основного ACL, он действует на создаваемые внутри данного каталога файлы и каталоги. При создании файла внутри такого каталога, файл получает ACL, равный ACL по умолчанию этого каталога.
Установка Linux ACLs
Для использования Linux ACLs необходимо получить на сайте разработчиков собственно пакет Linux ACLs и патчи для ядра операционной системы Linux и некоторых утилит. Само собой, после наложения патчей придется перекомпилировать ядро операционной системы и утилиты.
При подготовке к компиляции ядра операционной системы Linux необходимо выполнить следующие действия:
1. В меню Code Maturity Level Options отметить пункт Prompt for development and/or incomplete code/drivers .
2. В меню Filesystems отметить пункт Extended filesystem attributes (EXPRIMENTAL).
3. Затем отметить два подпункта: Extended user attributes и Access Control Lists .
4. В пункте Second extended fs support отметить подпункт Extended attributes for ext2 (DANGEROUS).
После этого можно компилировать ядро операционной системы.
После компиляции и установки ядра операционной системы следует переходить к установке утилит управления расширенным доступом к файлам и накладыванию патчей на стандартные утилиты.
Для установки утилит необходимо скомпилировать пакет ACL, который также берется на сайте разработчиков. Процесс компиляции и установки подробно описан в документации, входящей в комплект пакета. На том же сайте берем патчи к стандартным утилитам операционной системы и применяем их по рецепту, приведенному в документации. После этого можно произвести перезагрузку операционной системы.
Установка и изменение прав доступа
Управление списками контроля доступа производится при помощи двух утилит – getfacl и setfacl.
С помощью getfacl можно просмотреть текущие параметры доступа любого файла. Например, при вызове getfacl для домашнего каталога пользователя vasya мы получим следующее:
getfacl /home/vasya
file: home/vasya
owner: vasya
group: users
user::rwx
group::–
other:–