Access Control Lists (Русский) - ArchWiki

# Access Control Lists (Русский)

From ArchWiki
Jump to navigation Jump to search

## Введение

ACL (Access Control List - Список Контроля Доступа) предоставляет расширенный и более гибкий механизм распределения прав файловых систем. Он предназначен для расширения прав доступа к файлам `UNIX`. ACL позволяет устанавливать разрешения любым пользователям или группам для различных файловых ресурсов.

## Установка

Пакет acl уже установлен так как является зависимостью для systemd.

## Настройка

### Включение ACL

Чтобы включить ACL, файловая система должна быть смонтирована с опцией `acl`. Используйте fstab для постоянного монтирование с данной опцией.

Вероятно параметр `acl` уже активен как параметр установки файловой системы по умолчанию. Это справедливо для Btrfs и ext{2,3,4} файловых систем. Команда для проверки разделов ext* на предмет включенного параметра `acl` :

    # tune2fs -l /dev/sdXY | grep "Default mount options:"

    Default mount options:    user_xattr acl

Также убедитесь, что опция монтирования по умолчанию не переопределена, об этом будет свидетельствовать присутствие параметра `noacl` в выводе `/proc/mounts` для соответствующего раздела.

Вы также можете установить параметры монтирования по умолчанию для файловой системы, используя команду `tune2fs -o option partition`, например:

    # tune2fs -o acl /dev/sdXY

Это очень удобно, так как избавляет от необходимости править `/etc/fstab`, а также установки опции `acl` при монтировании внешних дисков.

Примечание:

- `acl` указывается как опция установки по умолчанию при создании файловой системы ext{2,3,4}. Это настроено в файле `/etc/mke2fs.conf`.
- Параметры монтирования по умолчанию не указаны в `/proc/mounts`.
- При архивации с помощью `tar` используйте ключ --acls чтобы включить поддержку атрибутов `acl`.

### Изменение прав ACL

Для изменения прав ACL используйте команду setfacl.

Добавить разрешения для пользователя (`user` здесь имя пользователя или его ID):

    # setfacl -m "u:user:permissions" <file/dir>

Добавить разрешения для группы (`group` здесь имя группы или её ID):

    # setfacl -m "g:group:permissions" <file/dir>

Все файлы и каталоги при создании будут наследовать записи ACL родительского каталога:

    # setfacl -dm "entry" <dir>

Удалить определённую ACL запись:

    # setfacl -x "entry" <file/dir>

Удалить все ACL записи:

    # setfacl -b <file/dir>

### Просмотр прав ACL

Посмотреть права ACL:

    # getfacl <file/dir>

## Примеры

Установить все разрешения на файл "abc" для пользователя johny:

    # setfacl -m "u:johny:rwx" abc

Проверить разрешения:

    # getfacl abc

    # file: abc
    # owner: someone
    # group: someone
    user::rw-
    user:johny:rwx
    group::r--
    mask::rwx
    other::r--

Изменение разрешений для пользователя johny:

    # setfacl -m "u:johny:r-x" abc

Проверка разрешений:

    # getfacl abc

    # file: abc
    # owner: someone
    # group: someone
    user::rw-
    user:johny:r-x
    group::r--
    mask::r-x
    other::r--

Удаление всех записей расширения ACL:

    # setfacl -b abc

Проверка разрешений:

    # getfacl abc

    # file: abc
    # owner: someone
    # group: someone
    user::rw-
    group::r--
    other::r--

### Вывод команды ls

Знак `+`(плюс) в выводе команды `ls -l` который следует за правами Unix, указывает на использование ACL.

    $ ls -l /dev/audio

    crw-rw----+ 1 root audio 14, 4 nov.   9 12:49 /dev/audio

    $ getfacl /dev/audio

    getfacl: Removing leading '/' from absolute path names
    # file: dev/audio
    # owner: root
    # group: audio
    user::rw-
    user:solstice:rw-
    group::rw-
    mask::rw-
    other::---

### Поиск файлов с правами ACL

    getfacl -R -s -p <dir> | sed -n 's/^# file: //p'

данная команда ищет в указанном каталоге и его подкаталогах все файлы и директории которые имеют права ACL

### Предоставление разрешений на выполнение личных файлов веб-сервером

Следующий метод описывает то, как процесс веб-сервера может получить доступ к файлам находящихся в домашней папке пользователя, без ущерба для безопасности.

Будем считать что веб-сервер работает от пользователя `webserver` и предоставляет доступ к домашнему каталогу `/home/geoffrey` пользователя `geoffrey`.

Для начала разрешим `webserver` доступ к домашней папке пользователя `geoffrey` :

    # setfacl -m "u:webserver:--x" /home/geoffrey

Примечание: Права доступа к каталогу дают возможность процессу читать содержимое данного каталога.

Поскольку `webserver` теперь имеет доступ к файлам в `/home/geoffrey` то безопаснее будет удалить доступ `other` пользователей:

    # chmod o-rx /home/geoffrey

Проверим изменения с помощью `getfacl`:

    $ getfacl /home/geoffrey
    getfacl: Removing leading '/' from absolute path names
    # file: home/geoffrey
    # owner: geoffrey
    # group: geoffrey
    user::rwx
    user:webserver:--x
    group::r-x
    mask::r-x
    other::---

Как видно из вывода, `other` больше не имеют никаких разрешений, но `webserver` все еще может обращаться к файлам.

## Дополнительные ресурсы

- getfacl(1)
- setfacl(1)

Category:

- Access control (Русский)