Jump to content

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

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Access Control Lists. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Списки управления доступом (Access Control Lists, ACL) — расширенный, более гибкий механизм прав доступа для файловых систем, разработанный как дополнение к стандартным правам доступа UNIX. ACL позволяет задавать права доступа к объектам на диске для пользователей и групп.

## Установка

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

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

Для использования ACL файловая система должна быть смонтирована с опцией `acl`. Файл fstab позволяет настроить постоянное монтирование с данной опцией.

В некоторых файловых системах параметр монтирования `acl` включён по умолчанию. К таким файловым системам относятся Btrfs и Ext2/3/4. Следующая команда позволяет проверить раздел с файловой системой ext* на наличие параметра `acl`:

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

    Default mount options:    user_xattr acl

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

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

    # tune2fs -o acl /dev/sdXY

Это очень удобно при работе с внешними дисками, поскольку такой диск будет монтироваться с опцией `acl` и на других Linux-машинах. В противном случае придётся редактировать файл `/etc/fstab` на каждой системе.

Примечание

- `acl` используется как опция монтирования по умолчанию при создании файловой системы ext2/3/4. Это настраивается в файле `/etc/mke2fs.conf`.
- Параметры монтирования по умолчанию в `/proc/mounts` не указаны.

## Использование

### Изменение ACL

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

Совет

- Флаг `--test` позволяет вывести изменения прав доступа к файлу/каталогу без их реального применения (т.н. dry-run).
- Флаг `-R`/`--recursive` позволяет применять действия рекурсивно.

Задать права пользователя (в качестве `пользователь` можно использовать имя пользователя или его ID):

    # setfacl -m "u:пользователь:права" <file/dir>

Задать права группы (в качестве `группа` можно использовать имя группы или её ID):

    # setfacl -m "g:группа:права" <file/dir>

Задать права для остальных:

    # setfacl -m "other:права" <file/dir>

Настроить наследование новыми файлами и каталогами записей ACL родительского каталога (не относится к файлам/каталогам, которые копируются в каталог):

    # setfacl -dm "запись_ACL" <dir>

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

    # setfacl -x "запись_ACL" <file/dir>

Удалить записи по умолчанию:

    # setfacl -k <file/dir>

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

    # setfacl -b <file/dir>

The factual accuracy of this article or section is disputed.

Reason: Оригинальное замечание об опции `--mask` (взятое из setfacl(1)) было признано неточным, но новый вариант также, судя по всему, неверен. Подробности см. по ссылке на обсуждение. (Discuss in Talk:Access Control Lists#ACL mask entry)
Примечание По умолчанию setfacl вычисляет значение маски ACL, если она не была задана явно флагом `--mask`. С помощью маски задаются максимальные права, которые могут быть даны пользователю (не владельцу) или группе. Если маска не задаётся явно, то ей присваивается значение прав "группы по умолчанию". Например, предположим, что группа определённого каталога имеет права `r-x`. Если добавить ACL-пользователя или группу с правами `rwx`, то эффективными правами этого пользователя/группы применительно к данному каталогу будут `r-x`. Причина подобного поведения заключается в предотвращении "сюрпризов" при перемещении файлов из системы, не поддерживающей ACL, в систему с ACL.

### Просмотр ACL

Вывести права доступа ACL:

    # getfacl <file/dir>

## Примеры

Установить все права доступа к файлу `abc` для пользователя `johnny`:

    # 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--

Измененить права для пользователя `johnny`:

    # 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

Символ `+` (плюс) после прав доступа Unix в выводе команды `ls -l` указывает на использование 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::---

### Права на выполнение личных файлов

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

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

Санчала предоставим права на выполнение для пользователя `http`:

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

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

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

    # 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:http:--x
    group::r-x
    mask::r-x
    other::---

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

Если необходимо будет выдать пользователю `http` права доступа на запись в определённые файлы/каталоги, выполните:

    # setfacl -dm "u:http:rwx" /home/geoffrey/project1/cache

## Смотрите также

- getfacl(1)
- setfacl(1)
- POSIX Access Control Lists on Linux
- How to set default file permissions for all folders/files in a directory?

Category:

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

Hidden category:

- Pages or sections flagged with Template:Accuracy

Access Control Lists (Русский)
Add topic