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

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Введение

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

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

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

Будем считать что веб-сервер работает от пользователя 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 все еще может обращаться к файлам.

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