LXF125:DrBrown2

Материал из Linuxformat.

Перейти к: навигация, поиск

Списки управления доступом

ACL Только доктор решил, что одолел chmod, как нашелся ACL.

B девяностых годах прошлого века комитет POSIX по стандартизации (IEEE 1003.1e) работал над набором расширений безопасности для Unix. Когда финансирование прекратилось, от стандарта отказались, но во многом он уже был завершен, и кое-что из него перекочевало в Linux, например, списки управления доступом (ACL).

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

Файловые системы ext2 и ext3 поддерживают ACL, но только в том случае, когда они смонтированы с опцией acl. Например:

sudo mount -o acl /dev/sda2 /home

Анатомия команды setfacl.

Конечно, более солидный под ход – добавить параметры монтирования в /etc/fstab, например, так:

/dev/sda2 /home ext3 acl        0           0

Если ACL активированы, управлять ими можно с помощью утилит командной строки setfacl и getfacl. На рисунке показаны синтаксис команды setfacl и способ представления ACL.

Давайте выполним несколько команд, чтобы посмотреть, как все это работает. Сначала создадим файл foo и установим права доступа к нему в 600:

touch foo
chmod 600 foo
ls -l foo
-rw------- 1chris chris02009-08-1814:45foo

Обратите внимание, что в ACL файла автоматически добавятся три раздела, соответствующие обычным правам доступа (вывод команды так же содержит строки file, owner и group, которые мы на данном уроке не меняем).

getfacl foo
user::rw-
group::---
other::---

На самом деле эти разделы автоматически синхронизируются с обычными правами доступа – изменения, произведенные командой chmod, появятся в выводе getfacl, а изменения setfacl появятся в выводе ls -l.

Создадим еще два ACL, добавив доступ на чтение-запись для пользователя Tom и доступ на чтение для группы Games:

setfacl -m u:tom:rw foo
setfacl -m g:games:r foo
getfacl foo
user::rw-
user:tom:rw-
group::---
group:games:r--
mask::rw-
other::---

Дело немного усложнится, если задать маску ACL. Она используется для ограничения доступа явно поименованных в ACL пользователей и групп и не затрагивает права владельца файла. Здесь мы устанавливаем маску только для чтения и снова просматриваем ACL. Обратите внимание, что фактические права Тома были ограничены маской; теперь это только чтение, а не чтение и запись:

setfacl -m m::r foo
getfacl foo
user::rw-
user:tom:rw-           #effective:r--
group::---
group:games:r--
mask::r--
other::---

Наконец, можно удалить ACL таким образом:

setfacl -x g:games: foo
getfacl foo
user::rw-
user:tom:rw-
group::---
mask::rw-
other::---

Команда ls не пытается отобразить полный список управления доступом для файла, но позволяет понять, что он задан (об этом говорит знак + после девяти бит прав доступа):

ls -l foo
-rw-r-----+ 1 chris chris02009-08-1814:45foo

Задать список управления доступом для файла можно и по-другому. Во-первых, можно заставить setfacl прочитать ACL из файла или из стандартного ввода. Следующий пример показывает, как скопировать ACL с foo в bar:

getfacl foo1 | setfacl --set-file=- bar

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

mkdir acltest
setfacl -d -m u:tom:rw,g:games:r acltest

Если теперь создать новый файл в этом каталоге и просмотреть его ACL, мы увидим списки для Tom и Games, которые пришли от списка по умолчанию каталога acltest.

Исходя из моего опыта, ACL используются не слишком часто. Большинство пользователей не представляют себе всех возможных сценариев, которых можно достичь стандартными правами доступа, осторожно используя группы и, возможно, установкой битов setuid и setgid.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию