Setfacl — различия между версиями

Материал из VAAL-WIKI
Перейти к: навигация, поиск
Строка 50: Строка 50:
 
Проверка установленных разрешений:
 
Проверка установленных разрешений:
 
  # getfacl filename
 
  # getfacl filename
 +
 +
=== Параметры ===
 +
 +
{| class="wikitable sortable"
 +
|-
 +
! Опции !! Значение
 +
|-
 +
| '''-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''' || Вывод справки
 +
|}
  
 
==Примеры==
 
==Примеры==

Версия 15:24, 18 мая 2017

Введение

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

Установка

ACL доступно из /core хранилища пакетов:

# pacman -S 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 не наделён такими полномочиями.

Ссылки