После того как в ядре включена поддержка списков контроля доступа и установлены соответствующие утилиты, можно воспользоваться командами getfacl и setf acl для создания и просмотра списков. Рассмотрим ряд примеров.
С помощью команды getfacl можно просмотреть сиисок контроля доступа, связанный с файлом или каталогом. В листинге 4.8 проверяется файл test, расположенный в каталоге /data (строки листинга пронумерованы для наглядности). Ему назначен стандартный список. В строке 3 отображается полное имя файла без начального символа /. В строках 4 и 5 показано имя владельца и группы соответственно. Строки 68 демонстрируют права доступа к файлу. Обратите внимание на то, что триплет other равен
, т.е. только суперпользователь имеет доступ к файлу. В стандартном списке контроля
доступа попросту повторяется информация, которая отображается командой Is 1.
Листинг 4.8. Стандартный сиисок контроля доступа к файлу
1. getfacl /data/test
2. getfacl: Removing leading '/' from absolute path names
3. file: data/test
4. owner: root
5. group: root
6. user::rw7. group::r—
8. other::
9. 10.
Команда setfacl позволяет добавлять записи в список контроля доступа конкретного файла или каталога. Каждому пользователю или группе в списке предоставляется отдельный набор привилегий: на чтение, запись и выполнение (rwx или эквивалентное восьмеричное число). В листинге 4.9 показано, как предоставить пользователю j ое право чтения файла. Команда setfacl m дополнительно назначает атрибут mask . В строке 8 показана запись списка, соответствующая пользователю joe. Режим г — (только чтение) эквивалентен коду 4. Теперь пользователь j ое может читать файл, даже не являясь членом группы root или суперпользователем. То же самое можно сделать для целой группы пользователей.
Листинг 4.9. Включение пользователя в список контроля доступа
1. setfacl ш user:joe:4,mask::4 /data/test
2. getfacl /data/test
3. getfacl: Removing leading '/' from absolute path names
4. file: data/test
5. owner: root
6. group: root
7. user::rw8. user:joe:r—
9. group::r—
10. mask::r—
11. other::
12.
Теперь необходимо разобраться с тем, что же такое атрибут mask. Ему соответствует такой же набор привилегий, как пользователю или группе. Когда пользователь пытается получить доступ к файлу, значение mask побитово умножается на код прав доступа, назначенный этому пользователю или его группе, формируя реальный набор привилегий. Другими словами, значение mask отражает максимально возможные привилегии для пользователя. В листинге 4.9 значение mask не уменьшало права пользователя joe. Но что произойдет в противном случае Ответ приведен в листинге 4.10. Заметьте: эффективные (реальные) права доступа, предоставляемые пользователю joe и группе staff, разрешают только чтение, несмотря на то что команда setfacl явно разрешает чтение/запись.
Листинг 4.10. Влияние значения mask
setfacl m user:joe:6,group:staff:6,mask::4 /data/test
getfacl /data/test
getfacl: Removing leading '/' from absolute path names
file: data/test
owner: root
group: root user::rwuser:
j oe:rweffective: r— group::r—
group:staff:rweffective:r— mask::r— other::r—
Применение списков контроля доступа для важных каталогов и файлов позволяет гораздо лучше контролировать, какие пользователи и группы могут работать с ними и что они при этом имеют право делать.