Управление правами ACL

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.