Difference between revisions of "Access Control Lists (Русский)"

From ArchWiki
Jump to navigation Jump to search
m (change category to the Category:Access control (Русский))
 
(37 intermediate revisions by 11 users not shown)
Line 1: Line 1:
[[Category: Безопасность]]
+
[[Category:Access control (Русский)]]
[[Category: Русский]]
+
[[Category:Русский]]
 +
[[en:Access Control Lists]]
 +
[[es:Access Control Lists]]
 +
[[ja:アクセス制御リスト]]
 +
{{Unmaintained (Русский)}}
 +
==Введение==
 +
'''ACL''' ('''A'''ccess '''C'''ontrol '''L'''ist - Список Контроля Доступа) предоставляет расширенный и более гибкий механизм распределения прав файловых систем. Он предназначен для расширения прав доступа к файлам <code>UNIX</code>. ACL позволяет устанавливать разрешения любым пользователям или группам для различных файловых ресурсов.
  
{{i18n_links_start}}
+
==Установка==
{{i18n_entry|English|ACL}}
+
Пакет {{Pkg|acl}} уже установлен так как является зависимостью для [[systemd]].
{{i18n_entry|Русский|ACL_Русский}}
 
{{i18n_links_end}}
 
  
{{translateme}}
+
==Настройка==
  
==Введение==
+
=== Включение ACL ===
'''A'''ccess '''C'''ontrol '''L'''ist предоставляет расширенный и более гибкий механизм распределения прав файловых систем. Он предназначен для расширения прав доступа к файлам <code>UNIX</code>. ACL позволяет устанавливать разрешения любым пользователям или группам для различных файловых ресурсов.
+
 
 +
Чтобы включить ACL, файловая система должна быть смонтирована с опцией {{ic|acl}}. Используйте [[fstab]] для постоянного монтирование с данной опцией.
 +
 
 +
Вероятно параметр {{ic|acl}} уже активен как параметр установки файловой системы по умолчанию. Это справедливо для [[Btrfs]] и ext{2,3,4} файловых систем.
 +
Команда для проверки разделов ext* на предмет включенного параметра {{ic|acl}} :
  
==Установка==
+
{{hc|# tune2fs -l /dev/sd''XY'' <nowiki>|</nowiki> grep "Default mount options:"|
ACL доступно из /core хранилища пакетов:
+
Default mount options:    user_xattr acl
# pacman -S acl
+
}}
  
==Настройка==
+
Также убедитесь, что опция монтирования по умолчанию не переопределена, об этом будет свидетельствовать присутствие параметра {{ic|noacl}} в выводе {{ic|/proc/mounts}} для соответствующего раздела.
  
===Включение ACL===
+
Вы также можете установить параметры монтирования по умолчанию для файловой системы, используя команду {{ic|tune2fs -o ''option'' ''partition''}}, например:
Для включения ACL - откройте для редактирования файл '''/etc/fstab''' и добавьте атрибут '''acl''' к опциям раздела, где полагается использование ACL:
 
  
<pre>
+
# tune2fs -o acl /dev/sd''XY''
#  
 
# /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
+
Это очень удобно, так как избавляет от необходимости править {{ic|/etc/fstab}}, а также установки опции {{ic|acl}} при монтировании внешних дисков.
  
UUID=8e5259dd-26fc-411a-88e2-f38d4dc36724 /home reiserfs defaults,acl 0 1
+
{{Примечание|
 +
* {{ic|acl}} указывается как опция установки по умолчанию при создании файловой системы ext{2,3,4}. Это настроено в файле {{ic|/etc/mke2fs.conf}}.
 +
* Параметры монтирования по умолчанию не указаны в {{ic|/proc/mounts}}.
 +
* При архивации с помощью {{ic|tar}} используйте ключ '''--acls''' чтобы включить поддержку атрибутов {{ic|acl}}.
 +
}}
  
UUID=c18f753e-0039-49bd-930f-587d48b7e083 / reiserfs defaults 0 1
+
=== Изменение прав ACL ===
</pre>
 
  
Сохраните файл. Переподключите раздел:
+
Для изменения прав ACL используйте команду ''setfacl''.
# mount -o remount /home
 
  
===Установка прав ACL===
+
Добавить разрешения для пользователя ({{ic|''user''}} здесь имя пользователя или его ID):
To modify ACL use '''setfacl''' command. To add permissions use '''setfacl -m'''.
+
# setfacl -m "u:''user:permissions''" <file/dir>
  
Add permissions to some user:
+
Добавить разрешения для группы ({{ic|''group''}} здесь имя группы или её ID):
  # setfacl -m "u:username:permissions"
+
  # setfacl -m "g:''group:permissions''" <file/dir>
or
 
# setfacl -m "u:uid:permissions"
 
  
Add permissions to some group:
+
Все файлы и каталоги при создании будут наследовать записи ACL родительского каталога:
  # setfacl -m "g:groupname:permissions"
+
  # setfacl -dm "''entry''" <dir>
or
 
# setfacl -m "g:gid:permissions"
 
  
Remove all permissions:
+
Удалить определённую ACL запись:
  # setfacl -b
+
  # setfacl -x "''entry''" <file/dir>
  
Remove each entry:
+
Удалить все ACL записи:
  # setfacl -x "entry"
+
  # setfacl -b <file/dir>
  
To check permissions use:
+
=== Просмотр прав ACL ===
  # getfacl filename
+
Посмотреть права ACL:
 +
  # getfacl <file/dir>
  
==Примеры==
+
== Примеры ==
  
Set all permissions for user johny to file named "abc":
+
Установить все разрешения на файл "abc" для пользователя johny:
 
  # setfacl -m "u:johny:rwx" abc
 
  # setfacl -m "u:johny:rwx" abc
Check permissions
+
Проверить разрешения:
# getfacl abc
+
{{hc|# getfacl abc|
 
 
<pre>
 
 
# file: abc
 
# file: abc
 
# owner: someone
 
# owner: someone
Line 77: Line 75:
 
mask::rwx
 
mask::rwx
 
other::r--
 
other::r--
</pre>
+
}}
  
Change permissions for user johny:
+
Изменение разрешений для пользователя johny:
 
  # setfacl -m "u:johny:r-x" abc
 
  # setfacl -m "u:johny:r-x" abc
Check permissions
+
Проверка разрешений:
# getfacl abc
+
{{hc|# getfacl abc|
 
 
<pre>
 
 
# file: abc
 
# file: abc
 
# owner: someone
 
# owner: someone
Line 93: Line 89:
 
mask::r-x
 
mask::r-x
 
other::r--
 
other::r--
</pre>
+
}}
  
Remove all extended ACL entries:
+
Удаление всех записей расширения ACL:
 
  # setfacl -b abc
 
  # setfacl -b abc
Check permissions
+
Проверка разрешений:
# getfacl abc
+
{{hc|# getfacl abc|
 
 
<pre>
 
 
# file: abc
 
# file: abc
 
# owner: someone
 
# owner: someone
Line 107: Line 101:
 
group::r--
 
group::r--
 
other::r--
 
other::r--
</pre>
+
}}
  
 
=== Вывод команды ls ===
 
=== Вывод команды ls ===
You will notice that there is an ACL for a given file because it will exhibit a '''+'''(plus sign) after its unix rights in the output of of '''ls -l'''.
+
Знак {{ic|'''+'''}}(плюс) в выводе команды {{ic|ls -l}} который следует за правами Unix, указывает на использование ACL.
  
<pre>
+
{{hc|$ ls -l /dev/audio|
$ ls -l /dev/audio  
 
 
crw-rw----+ 1 root audio 14, 4 nov.  9 12:49 /dev/audio
 
crw-rw----+ 1 root audio 14, 4 nov.  9 12:49 /dev/audio
 +
}}
  
$ getfacl /dev/audio
+
{{hc|$ getfacl /dev/audio|
 
getfacl: Removing leading '/' from absolute path names
 
getfacl: Removing leading '/' from absolute path names
 
# file: dev/audio
 
# file: dev/audio
Line 126: Line 120:
 
mask::rw-
 
mask::rw-
 
other::---
 
other::---
 +
}}
  
</pre>
+
=== Поиск файлов с правами ACL ===
  
==Повышение безопасности веб-сервера==
+
getfacl -R -s -p <dir> | sed -n 's/^# file: //p'
 +
данная команда ищет в указанном каталоге и его подкаталогах все файлы и директории которые имеют права ACL
  
You can now add permissions to our home directory or/and site directory only to nobody user any anyone else - without "whole world" to increase your security.
+
=== Предоставление разрешений на выполнение личных файлов веб-сервером ===
  
Go to the home directory:
+
Следующий метод описывает то, как процесс веб-сервера может получить доступ к файлам находящихся в домашней папке пользователя, без ущерба для безопасности.
# cd /home
+
 
Add permissions '''+x''' for nobody user on your home directory via ACL:
+
Будем считать что веб-сервер работает от пользователя {{ic|webserver}} и предоставляет доступ к домашнему каталогу {{ic|/home/geoffrey}} пользователя {{ic|geoffrey}}.
  # setfacl -m "u:nobody:--x" homeusername/
+
 
Now you can remove whole world rx permissions:
+
Для начала разрешим {{ic|webserver}} доступ к домашней папке пользователя {{ic|geoffrey}} :
  # chmod o-rx homeusername/
+
  # setfacl -m "u:webserver:--x" /home/geoffrey
Check our changes:
+
{{Note (Русский)|Права доступа к ''каталогу'' дают возможность процессу читать содержимое данного каталога.}}
   
+
 
<pre># file: username/
+
Поскольку {{ic|webserver}} теперь имеет доступ к файлам в {{ic|/home/geoffrey}} то безопаснее будет удалить доступ {{ic|other}} пользователей:
# owner: username
+
  # chmod o-rx /home/geoffrey
# group: users
+
 
user::rwx
+
Проверим изменения с помощью {{ic|getfacl}}:
user:nobody:--x
+
  $ getfacl /home/geoffrey
group::r-x
+
getfacl: Removing leading '/' from absolute path names
mask::r-x
+
# file: home/geoffrey
other::---
+
# owner: geoffrey
</pre>
+
# group: geoffrey
As we can see others don't have any permissions but user nobody have "x" permission so they can "look" into users directory and give access to users pages from their home directories to www server. Of course if www server work as nobody user. But - whole world except nobody - don't have any permissions.
+
user::rwx
 +
user:webserver:--x
 +
group::r-x
 +
mask::r-x
 +
other::---
 +
 
 +
Как видно из вывода, {{ic|other}} больше не имеют никаких разрешений, но {{ic|webserver}} все еще может обращаться к файлам.
  
==Дополнительные ресурсы==
+
== Дополнительные ресурсы ==
* Man Page - '''man getfacl"
+
* {{man|1|getfacl}}
* Man Page - '''man setfacl"
+
* {{man|1|setfacl}}

Latest revision as of 20:21, 19 March 2019

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

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

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