Setfacl

Материал из VAAL-WIKI
Перейти к: навигация, поиск

Введение

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

Установка

Установка ACL доступна из репозитория rhel-server-eus-rpms или rhel-server-rpms пакетов:

  1. yum install -y acl

Настройка

Включение ACL

Для включения ACL - отредактируйте файл /etc/fstab и добавьте атрибут acl к опциям раздела, где полагается использование ACL:

# 
# /etc/fstab: static file system information
#
# <file system>        <dir>         <type>    <options>          <dump> <pass>
none                   /dev/pts      devpts    defaults            0      0
none                   /dev/shm      tmpfs     defaults            0      0

UUID=5de01fca-7c63-49b0-9b2b-8b1790f8428e swap swap defaults 0 0

UUID=8e5259dd-26fc-411a-88e2-f38d4dc36724 /home reiserfs defaults,acl 0 1

UUID=c18f753e-0039-49bd-930f-587d48b7e083 / reiserfs defaults 0 1

Сохраните файл. Переподключите раздел:

# mount -o remount /home

Установка прав ACL

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

Добавление прав какому-нибудь пользователю:

# setfacl -m "u:username:permissions"

или

# setfacl -m "u:uid:permissions"

Для добавления прав какой-нибудь группе:

# setfacl -m "g:groupname:permissions"

или

# setfacl -m "g:gid:permissions"

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

# setfacl -b

Удаление всех записей:

# setfacl -x "entry"

Проверка установленных разрешений:

# getfacl filename

Параметры

Опции Значение
-m, --modify=acl Добавить и модифицировать существующие записи ACL
-M, --modify-file=file Добавить и модифицировать существующие записи ACL взятые из указанного файла
-x, --remove=acl Удалить указанные ACL права взятые из указанного файла
-b, --remove-all Удалить все ACL права с объекта, сохраняя основные права
-k, --remove-default Удалить с объекта ACL по умолчанию. Если таковых на объекте нет, предупреждение об этом выдаваться не будет
--set=acl Установить новые указанные права ACL, удаляя все существующие. Необходимо, чтобы наравне с задаваемыми правилами ACL были также указаны стандартные права Unix, в противном случае будет давать ошибку
--set-file=file Установить новые указанные права ACL, взятые из указанного файла, удаляя все существующие. Необходимо, чтобы наравне с задаваемыми правилами ACL были также указаны стандартные права Unix, в противном случае будет давать ошибку
--mask Пересчитать маску действующих прав
-n, --no-mask Не пересчитывать маску действующих прав
-d, --default Установить ACL по умолчанию на объект
-R, --recursive Рекурсивное назначение (удаление) прав, тобишь пройтись по всем подкаталогам
-L, --logical Логический обход, следующий символическим ссылкам
-P, --physical Физический обход, не следующий символическим ссылкам
--restore=file Восстанавить ACL права на объекты из ранее созданного файла с правами
--test Тестовый режим
-v, --version Вывод версии
-h, --help Вывод справки

Примеры

Установить все разрешения на файл "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::---

Повышение безопасности веб-сервера

Для повышения безопасности веб-сервера добавьте расширенные права на домашнюю директорию и/или директорию сайта только для пользователя http.

Перейдите в домашнюю директорию:

# cd /home

Добавьте разрешение +x для пользователя http с помощью ACL:

# setfacl -m "u:http:--x" homeusername/

Теперь удалите права rx разрешающие использование директории другим пользователям:

# chmod o-rx homeusername/

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

# file: username/
# owner: username
# group: users
user::rwx
user:http:--x
group::r-x
mask::r-x
other::---

Как мы можем видеть, другие пользователи не имеют доступа, но для пользователя http установлен атрибут "x", что разрешает ему просмотр пользовательской директории и дает доступ к веб-страницам пользователя. Это справедливо, если веб-сервер работает от имени пользователя http. По умолчанию пользователь http не наделён такими полномочиями.

Ссылки