Европейский Университет в Санкт-Петербурге
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 1716 / 298 | Оценка: 4.30 / 3.85 | Длительность: 16:22:00
ISBN: 978-5-94774-820-8
Лекция 6:

Файловая система: разделы, файлы и каталоги

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >

Индексные дескрипторы

Формат таблицы индексных дескрипторов и самих дескрипторов обсуждался в лекции 5. Следует сказать, что непосредственное изменение индексного дескриптора невозможно, так как модификацию дескриптора выполняют различные программы в процессе своей работы. Нет необходимости вмешиваться в содержимое индексного дескриптора напрямую. Для восстановления таблицы индексных дескрипторов после сбоя следует воспользоваться программой fsck.

Списки ACL

Стандартные права доступа в UNIX не всегда идеальным образом подходят для решения задач администрирования системы. Например, что сделает администратор, если доступ к файлу на чтение и запись надо дать одной группе пользователей? Конечно, сделает эту группу владелицей файла, а затем делегирует право чтения и записи файла этой группе, вот так:

chgrp нужная_группа файл
chmod g=rw файл

А если надо дать право доступа только одному из членов этой группы? Тогда можно создать новую группу специально для этой цели, сделать ее членом только одного пользователя, и затем указать, что эта новая группа будет владеть файлом:

addgroup новая_группа
chgrp новая_группа файл
chmod g=rw файл
#редактируем /etc/group и добавляем в новую группу
   существующего пользователя
vi /etc/group

Такое ухищрение нам помогло, но что делать, если надо дать право чтения, записи и запуска двум разным пользователям, а еще двум - право чтения и записи, а еще одному - только чтения? А всем остальным - вообще не дать доступ к этому файлу? На такой вопрос нет ответа, если вы работаете в "классической" версии UNIX. Однако некоторые современные системы UNIX (например, Solaris, Linux и FreeBSD) обладают требуемым механизмом. Это - списки управления доступом к файловой системе, access control lists (ACLs).

Списки управления доступом дают более гибкие возможности назначения прав доступа, чем традиционные права доступа UNIX. С помощью ACL можно назначить как права доступа хозяина файла, группы файла и всех остальных, так и отдельные права для указанных пользователей и групп, а также максимальные права доступа по умолчанию, которые разрешено иметь любому пользователю.

Здесь и далее мы будем называть ACL для файлов и каталогов "расширенными правами доступа ". Расширенные права доступа к файлам и каталогам устанавливаются командой setfacl.

Они представляют собой ряд полей, разделенных двоеточиями:

entry_type:[uid|gid]:perms

Здесь entry_type - тип расширенного права доступа, uid и gid - идентификаторы пользователя и группы, соответственно, а perms - собственно назначаемые права доступа.

Расширенные права доступа (ACL) к файлам

Расширенные права доступа к файлу могут быть такими, как показано в таблице 6.3.

Таблица 6.3. Расширенные права доступа к файлам
u[ser]::perms права доступа хозяина файла
g[roup]::perms права доступа группы файла
o[ther]:perms права всех остальных
m[ask]:perms маска ACL
u[ser]:uid:perms права доступа указанного пользователя; в качестве uid можно указать и UID, и имя пользователя
g[roup]:gid:perms права доступа указанной группы; в качестве gid можно указать и GID, и имя группы

Маска задает максимальные права доступа для всех пользователей, за исключением хозяина и групп. Установка маски представляет собой самый быстрый путь изменить фактические (эффективные) права доступа всех пользователей и групп. Например, маска r-- показывает, что пользователи и группы не могут иметь больших прав, чем просто чтение, даже если им назначены права доступа на чтение и запись.

Расширенные права доступа (ACL) к каталогам

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

Таблица 6.4. Расширенные права доступа к каталогам
d[efault]:u[ser]::perms права хозяина файла по умолчанию
d[efault]:g[roup]::perms права группы файла по умолчанию
d[efault]:o[ther]:perms права остальных пользователей по умолчанию
d[efault]:m[ask]:perms маска ACL по умолчанию
d[efault]:u[ser]:uid:perms права доступа по умолчанию для указанного пользователя; в качестве uid можно указать и UID, и имя пользователя
d[efault]:g[roup]:gid:perms права доступа по умолчанию для указанной группы; в качестве gid можно указать и GID, и имя группы

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

Присвоение расширенных прав доступа осуществляется программой setfacl с ключом -s (set). Без этого ключа расширенные права доступа модифицируются, с ним - устанавливаются в точности такими, как указано в данной команде setfacl.

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

setfacl -m user:lena:rw-,user:petr:rw-    project07

Ключ -m служит для добавления прав доступа, а не для их замены. Эффективные (т.е. те, которые в самом деле будут иметь место) права доступа пользователей lena и petr определяются не только их персональными правами доступа к этому файлу, но и маской, которая показывает права доступа по умолчанию. Из персональных прав и маски выбираются наиболее строгие ограничения, поэтому, если в персональных правах доступа или в маске для файла project07 отсутствует право на запись, то ни lena, ни petr не получат реальной возможности изменить файл project07.

Расширенные права доступа не показываются в выводе программы ls, но команда ls -l позволяет установить наличие расширенных прав доступа к файлу или каталогу. Если они назначены, то в первой колонке после стандартных прав доступа владельца, группы файла и остальных будет стоять знак " + " ("плюс"). Узнать, какие именно расширенные права доступа назначены, можно с помощью команды

getfacl имя_файла

Более подробную информацию о ключах setfacl и getfacl следует получить из man.

Помните, что назначение прав доступа с помощью chmod может привести к изменению записей ACL, а изменение маски ACL может повлиять на фактические права доступа к объекту для его владельца, группы и всех остальных пользователей.

Упражнения

  1. Создайте файл.

    Установите расширенные права доступа к нему командой

    setfacl -m user:user1:rw-,user:user2:rw- имя_файла

    Используйте вместо user1 и user2 имена реальных пользователей вашей системы, вместо имя_файла - имя любого существующего файла в вашей системе.

  2. Проверьте командой ls -l права доступа к файлу.
  3. Проверьте командой getfacl имя_файла права доступа к файлу.
  4. Каковы эффективные права доступа к файлу? Измените маску с помощью setfacl или права доступа хозяина, группы или остальных пользователей командой chmod.
  5. Оцените, какое действие - установка маски ACL или прав доступа с помощью chmod действительно изменяет эффективные права доступа к файлу для пользователей user1 и user2.
  6. Выполните переход в домашний каталог командой cd ~. Выполнилась ли команда? Если нет, то почему? Какой командный интерпретатор вы используете? Попробуйте выполнить то же действие командой cd без параметров.
< Лекция 5 || Лекция 6: 123456 || Лекция 7 >