Access Control List (ACL) - список контроля доступа, определяет, какой пользователь может получать доступ к файлу или директории, и какие именно операции разрешено или запрещено этому пользователю.
Чтобы использовать права ACL файловая система должна поддерживать ACL по умолчанию (например xfs) или быть подключена с опцией acl (например reiserfs).
Для работы с ACL используются утилиты getfacl и setfacl.
Просмотр прав доступа
Для просмотра ACL прав на файл или директорию используется команда getfacl.
getfacl somedir
_# file: somedir/
_# owner: test
_# group: users
user::rwx
user:mike:rwx #effective:r-x
group::rwx #effective:r-x
group:worker:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:mike:rwx #effective:r-x
default:group::r-x
default:mask::r-x
default:other::—
Управление доступом
Для управлением доступом используется команда setfacl.
Для модификации или добавления правила используется параметр -m.
-m user:[пользователь]:права[,user:пользователь:права]
-m group:[группа]:права[,group:группа:права]
Если пользователь пропущен, то права назначаются владельцу файла.
Если группа пропущена, то права назначаются группе-владельцу файла.
Пример
Добавить право на чтение/запись файла secretinfo пользователям mike,test
setfacl -m user:mike:rw,u:test:rw secretinfo
Добавить право на чтение/выполнение файла runit группе runner
setfacl -m group:runner:rx runit
Права можно комбинировать в одной строке.
Пример
Добавить для файла qwerty право чтения для пользователя mike, право чтение/запись для test, чтение выполнение для группы master, запретить группе workers выполнять какие либо действия.
setfacl -modify u:mike:r,u:test:rw,g:workers:,g:master:rx qwerty
Права по умолчанию
Для директорий можно указать ACL права, которые будут автоматически добавляться для файлов и директорий, создаваемых в ней. Для этого используется идентификатор default или параметр -d. На саму директорию права указанные в default не распространяются.
Пример
Для файлов и директорий, создаваемых в директории mikedata, добавить право чтение/записи для пользователя mike.
setfacl -m default:user:mike:rw mikedata
Рекурсивная установка прав
Для установки прав для всех файлов и директорий внутри директории используется параметр -R. Так как для того, чтобы читать файл необходимы права r, а для того чтобы читать директорию необходимы права rx, то можно при указании прав за место х указывать X. X устанавливает права на выполнение только для директорий и файлов, которые уже имеют право выполняться. X вычисляется на момент запуска setfacl, поэтому в default правилах она интерпретируется как x.
Пример
Разрешить пользователю test читать все файлы и просматривать директорий в folder.
setfacl -R -m d:u:test:rwx,u:test:rwX folder
или
setfacl -R -m d:u:test:rw,u:test:rwX folder
Обе команды имеют недостаток, который проявляется при создании новых файлов и директорий. Разница в том, что в первом случае пользователь test получит право на выполнение всех новых файлов создаваемых в folder и вложенных директориях, а во втором случае пользователь не сможет просматривать новые директории.
Удаление прав
Для удаления правила для пользователя или группы используется параметр -x.
Пример
Удалить права доступа к файлу secretfile для пользователя test.
setfacl -x u:test secretfile
Удалить права доступа ко всем файлам и директориям внутри folder для пользователя mike.
setfacl -R -x u:mike folder
Очистка правил
Для удаления всех ACL правил используется опция -b. Ее также можно использовать совместно с -m, для того, чтобы заместить права.
Пример
Удалить все ACL правила и разрешить пользователю mike читать secretfile.
setfacl -b -m u:mike:r secretfile
Копирование ACL
Для того, чтобы установить ACL на файл аналогичный какому-либо другому файлу используется команда:
getfacl basefile | setfacl -b M targetfile
В этом случае файл targetfile будет иметь такие же права как и basefile. Это достигается за счет параметра M, при помощи которого можно задавать права из файла (или стандартного потока ввода).
Эффективная маска
Эффективная маска используется для ограничения определенного действия для всех пользователей и групп описанных в ACL. То есть можно например запретить всем писать в файл установив эффективную маску r-x.
Пример
setfacl -m m::rx filename
Иногда эффективная маска вычисляется автоматически (например при действии chmod, а также при создании файла, так как применяется права umask). Для отмены маски ее следует установить в значение rwx.
Порядок определения доступа к файлу.
Может ли пользователь выполнить действие над файлом или директорией определяются следующим образом.
# Используются права владельца, если пользователь им является.
# Используются права, указанные конкретно для этого пользователя.
# Если действие разрешено хотя бы для одной из группы в которую входит пользователь.
# Если пользователь не входит не в одну группу описанную в ACL, то используются права для other.