Европейский Университет в Санкт-Петербурге
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 1309 / 258 | Оценка: 4.34 / 3.65 | Длительность: 21:13:00
Лекция 6:

Файловая система

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

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

Списки ACL

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

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

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

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

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

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

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

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

entry_type:[uid|gid]:perms

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

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

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

Таблица 6.7. Расширенные права доступа к файлам
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.8. Расширенные права доступа к каталогам
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 (эти четыре обязательных записи указаны выше по тексту – первыми в таблице 6.7).

Присвоение расширенных прав доступа осуществляется программой 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 может повлиять на фактические права доступа к объекту для его владельца, группы и всех остальных пользователей.

Монтирование файлов в качестве устройств (lofi)

В Solaris есть возможность монтировать обычный файл в качестве блочного устройства. Самое широкое применение этой возможности – монтирование образа компакт-диска, хотя точно так же можно монтировать образы любых других дисков, которые легко создать – например, с помощью команды dd.

Для работы с образом диска, записанным в файл, требуется программа lofiadm, которая управляет драйвером lofi. Этот драйвер позволяет связать файл с блочным псевдоустройством. После этого содержимое файла будет доступно посредством обращения к файлу этого блочного устройства. У системы будет полное впечатление, что это и есть устройство и его можно монтировать с помощью mount, проверять на корректность записей на нем с помощью fsck и т.п.

Программу lofiadm следует использовать для добавления таких псевдоустройств, удаления связи файла и псевдоустройства и выводе информации о таких устройствах в системе.

Например, можно смонтировать образ компакт-диска стандарта ISO, лежащего в файле ex.iso:

lofiadm -a /home/ivan/ex.iso /dev/lofi/1

Затем можно смонтировать новое устройство в системе:

mount -F hsfs -o ro /dev/lofi/1 /mnt

и проверить, видно ли его:

df -k /mnt
Filesystem
    kbytes used   avail capacity Mounted on
/dev/lofi/1
    512418 512418    0      100%   /mnt

Для демонтирования псевдоустройства и его удаления из системы следует дать следующие команды:

umount /mnt
lofiadm -d /dev/lofi/1

Обратите внимание на возможность создания файловой системы на псевдоустройстве и появление устройства прямого доступа ( rlofi, аналогично rdsk ) после выполнения lofiadm –a:

lofiadm -a /export/home/test
/dev/lofi/1
newfs /dev/rlofi/1
newfs: construct a new file system /dev/rlofi/1: (y/n)? y

/dev/rlofi/1:
    71638 sectors in 119 cylinders of 1 tracks, 602 sectors
35.0MB in 8 cyl groups (16 c/g, 4.70MB/g, 2240 i/g) super-block
backups (for fsck -F ufs -o b=#) at: 32, 9664, 19296, 28928, ...

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

После перезагрузки связь файла и псевдоустройства теряется. Если требуется сделать ее постоянной, надо написать скрипт, который будет запускаться при загрузке и добавлять соответствующее псевдоустройство в систему, а затем его монтировать.

Возможность управлять псевдоустройствами зависит от прав доступа к файлу /dev/lofictl. По умолчанию правом монтирования и демонирования псевдоустройств обладает только root.

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Александр Васильченко
Александр Васильченко
Россия
Денис Гайдуль
Денис Гайдуль
Россия, Подольск