UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

243 lines (160 loc) 9.31 kB
## Contents * [1 Введение](#.D0.92.D0.B2.D0.B5.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5) * [2 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0) * [3 Настройка](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0) * [3.1 Включение ACL](#.D0.92.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_ACL) * [3.2 Изменение прав ACL](#.D0.98.D0.B7.D0.BC.D0.B5.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.B0.D0.B2_ACL) * [3.3 Просмотр прав ACL](#.D0.9F.D1.80.D0.BE.D1.81.D0.BC.D0.BE.D1.82.D1.80_.D0.BF.D1.80.D0.B0.D0.B2_ACL) * [4 Примеры](#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B) * [4.1 Вывод команды ls](#.D0.92.D1.8B.D0.B2.D0.BE.D0.B4_.D0.BA.D0.BE.D0.BC.D0.B0.D0.BD.D0.B4.D1.8B_ls) * [4.2 Поиск файлов с правами ACL](#.D0.9F.D0.BE.D0.B8.D1.81.D0.BA_.D1.84.D0.B0.D0.B9.D0.BB.D0.BE.D0.B2_.D1.81_.D0.BF.D1.80.D0.B0.D0.B2.D0.B0.D0.BC.D0.B8_ACL) * [4.3 Предоставление разрешений на выполнение личных файлов веб-сервером](#.D0.9F.D1.80.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.80.D0.B0.D0.B7.D1.80.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B9_.D0.BD.D0.B0_.D0.B2.D1.8B.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BB.D0.B8.D1.87.D0.BD.D1.8B.D1.85_.D1.84.D0.B0.D0.B9.D0.BB.D0.BE.D0.B2_.D0.B2.D0.B5.D0.B1-.D1.81.D0.B5.D1.80.D0.B2.D0.B5.D1.80.D0.BE.D0.BC) * [5 Дополнительные ресурсы](#.D0.94.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D1.80.D0.B5.D1.81.D1.83.D1.80.D1.81.D1.8B) ## Введение **ACL** (**A**ccess **C**ontrol **L**ist - Список Контроля Доступа) предоставляет расширенный и более гибкий механизм распределения прав файловых систем. Он предназначен для расширения прав доступа к файлам `UNIX`. ACL позволяет устанавливать разрешения любым пользователям или группам для различных файловых ресурсов. ## Установка Пакет [acl](https://www.archlinux.org/packages/?name=acl) уже установлен так как является зависимостью для [systemd](/index.php/Systemd "Systemd"). ## Настройка ### Включение ACL Чтобы включить ACL, файловая система должна быть смонтирована с опцией `acl`. Используйте [fstab](/index.php/Fstab "Fstab") для постоянного монтирование с данной опцией. Вероятно параметр `acl` уже активен как параметр установки файловой системы по умолчанию. Это справедливо для [Btrfs](/index.php/Btrfs "Btrfs") и ext{2,3,4} файловых систем. Команда для проверки разделов ext* на предмет включенного параметра `acl` : `# tune2fs -l /dev/sd*XY* | grep "Default mount options:"` ``` Default mount options: user_xattr acl ``` Также убедитесь, что опция монтирования по умолчанию не переопределена, об этом будет свидетельствовать присутствие параметра `noacl` в выводе `/proc/mounts` для соответствующего раздела. Вы также можете установить параметры монтирования по умолчанию для файловой системы, используя команду `tune2fs -o *option* *partition*`, например: ``` # tune2fs -o acl /dev/sd*XY* ``` Это очень удобно, так как избавляет от необходимости править `/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)](http://jlk.fjfi.cvut.cz/arch/manpages/man/getfacl.1) * [setfacl(1)](http://jlk.fjfi.cvut.cz/arch/manpages/man/setfacl.1)