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