Режим доступа к файлу (access mode), определяющий базовые разрешения r, w и х только для трех субъектов доступа (владельца, группы-владельца и всех остальных), не является достаточно гибким и удобным инструментом разграничения доступа.
Списки контроля доступа (W: [ACL], access control lists), согласно стандарту POSIX.1e, расширяют классический режим доступа к файлу дополнительными записями, определяющими права доступа для явно указанных пользователей и групп.
Для просмотра и модификации записей в списках доступа используются утилиты getfacl и setfacl соответственно.
В примере ниже для всех «остальных» (не входящих в группу candy) пользователей отзываются все права на каталог /srv/kingdom/stash, но для отдельного пользователя mike (не являющегося членом группы candy) назначаются права чтения, модификации и прохода в него rwx.
Содержимое
Списки контроля доступа
[email protected]:/srv/kingdom$ ls -lad .
drwxrwsr-t 2 bubblegum candy 4096 окт. 23 21:19 .
[email protected]:/srv/klngdom$ id
uid=1001(john) gld=1001(john) группы=1001(john) ,1007(candy)
[email protected]:/srv/klngdom$ mkdir stash
[email protected]:/srv/kingdom$ chmod o= stash/
[email protected]:/srv/kingdom$ ls -lad stash/
drwrws— 2 john candy 4096 нояб. 4 13:05 stash/
[email protected]:/srv/kingdom$ id mike
uid=1002(mike) gld=1002(mike) группы=1002(mike)
[email protected]:/srv/klngdom$ setfacl -m u:mike:rwx stash/
[email protected]:/srv/klngdom$ ls -lad stash/
drwxrws—- 2 john candy 4096 нояб. 4 13:05 stash/
[email protected]:/srv/kingdom$ getfacl stash/
. . . . . . . . . . . . . . .
user::rwx
user:mike:rwx
group::rwx
mask:: rwx
other::—
Групповая маска
С расширением множеств субъектов, для которых определены права доступа при помощи списков контроля доступа, возникает вопрос об их смысловой совместимости с режимом доступа, в котором определены всего три множества: пользователь-владелец, группа-владелец и все остальные.
Программы, работающие в соответствии с режимом доступа, считают, что если и существует некоторое количество «выделенных» субъектов со специально определенными правами, отличными от «всех остальных», то все эти субъекты входят в группу владельцев.
Списки контроля доступа позволяют «выделять» субъектов из числа любых пользователей и групп и. определять их права произвольным образом. Когда программа, работающая в соответствии с режимом доступа, назначает права группе-владельцу, она вправе считать что все «выделенные» субъекты будут ограничены этими правами.
Именно поэтому в список контроля доступа добавлена групповая маска прав, определяющая ограничения «выделенных» субъектов (называемых групповым классом субъектов) в их индивидуальных правах.
В примере из листинга ниже каталогу, которому определены индивидуальные права rwx для пользователя mike в списке контроля доступа, изменяют права группы-владельцев классического режима доступа.
Получившийся режим доступа означает, что никому кроме владельца файла не разрешено записывать в этот файл, что противоречит индивидуальным правам списка доступа. Противоречия устраняются маской списка доступа, ограничивающей эффективные права пользователя mike так, что бы это соответствовало режиму доступа по смыслу.
Групповая маска ACL
[email protected]:/srv/kingdom$ ls -lad stash/
drwxrws—+ 2 john candy 4096 нояб. 4 13:05 stash/
[email protected]:/srv/kingdori$ getfacl stash/
. . . . . . . . . . . . . . .
user::rwx
user:mike: rwx
group::rwx
mask:: rwx
other::—
[email protected]:/srv/kingdom$ chmod g-w stash/
[email protected]:/srv/kingdom$ ls -lad stash/
drwxr-s—+ 2 finn candy 4096 нояб. 4 13:05 stash/
[email protected]:/srv/kingdon$ getfacl stash/
. . . . . . . . . . . . . . .
user::rwx
user:mike:rwx #effective:r-x
group::rwx #effective:r-x
mask::r-x
other::—
Права по умолчанию
При создании новых файлов в каталогах с индивидуальными правами пользователей в списках доступа зачастую складывается ситуация, когда пользователи (имеющие доступ в каталоги) не получают нужных прав доступа к создаваемым файлам в этих каталогах.
В большинстве случаев это противоречит здравому смыслу, т. к. все файлы некоторого каталога являются в определенном смысле «общими» для множества пользователей, которым разрешен доступ в сам каталог.
В примере из листинга ниже в каталоге stash, куда пользователю mike предоставлен индивидуальный доступ при создании файла readme, он в силу SGID для каталога передается группе candy. В группу candy пользователь mike не входит (именно поэтому ему назначены индивидуальные права), в результате чего файл ему никак не будет доступен.
Проблема решается назначением каталогу stash прав доступа «по умолчанию» (default); которые будут унаследованы файлами, создающимися в этом каталоге.
Права по умолчанию
[email protected]:/srv/klngdom$ cd stash/
[email protected]:/srv/klngdom$ umask 0007
[email protected]:/srv/ktngdon/stash$ touch README
[email protected]:/srv/ktngdon/stash$ ls -la README
-rw-rw—- 1 john candy 0 нояб. 4 14:16 README
[email protected]:/srv/klngdon/stash$ id mike
[email protected]: /srv/kingdon/stash$ setfacl -m d:u:mike:rw .
[email protected]:/srv/kingdon/stash$ getfacl .
# file: .
. . . . . . . . . . . . . . .
default:user::rwx
default: user: mike: rw-
default:group::rwx
default-.mask::rwx
default:other::—
[email protected]:/srv/klngdon/stash$ touch README. mike
[email protected]:/srv/klngdon/stash$ ls -l README. mike
-rw-rw—-+ 1 john candy 0 нояб. 4 14:17 README.mike
[email protected]:/srv/kingdom/stash$ getfacl README. mike
# file: README.mike
. . . . . . . . . . . . . . .
user:mike:rw-
. . . . . . . . . . . . . . .