Thank you for reading this post, don't forget to subscribe!
Списки контроля доступом (ACL) дают большую гибкость, чем стандартный набор полномочий «пользователь/группа/остальные».
Например, необходимо пользователю дать доступ на чтение с логам nginx
создадим пользователя:
[root@centos ~]# adduser mid
авторизуемся под пользователя:
[root@centos ~]# su mid
и проверим:
[mid@centos ~]$ cat /var/log/nginx/access.log
cat: /var/log/nginx/access.log: Permission denied
можем добавить пользователя в группу nginx
[root@centos ~]# usermod -a -G nginx mid
проверяем:
[root@centos ~]# groups mid
mid : mid nginx
проверяем, поменялось ли что то при открытии файла из под пользователя:
[mid@centos ~]$ cat /var/log/nginx/access.log
cat: /var/log/nginx/access.log: Permission denied
ничего.
смотрим права на директорию:
[root@centos ~]# ls -lah /var/log/ | grep nginx
drwxr--r--. 2 nginx nginx 4.0K Aug 12 09:08 nginx
как мы видим, установлены права 744, но для директорий, чтобы открывать файлы расположенные в ней необходимы права на исполнение, т.е 755 установим их:
[root@centos ~]# chmod 755 /var/log/nginx/
и проверим из под пользователя:
[mid@centos ~]$ cat /var/log/nginx/access.log
test
как видим, всё ок.
Теперь удалим пользователя mid из группы nginx:
[root@centos ~]# gpasswd -d mid nginx
Removing user mid from group nginx
проверям
[root@centos ~]# groups mid
mid : mid
_____________________________________
Теперь перейдём к ACL
Утилита setfacl устанавливает ACL файлов и каталогов. Передайте ей параметр -m, чтобы добавить или удалить ACL файла или каталога:
setfacl -m <rules> <files>
Формат правил (<rules>) описывается ниже. В одной команде можно указывать несколько правил, разделяя их запятыми.
u:<uid>:<perms>- Назначает ACL для доступа заданному пользователю. Здесь можно указать имя или код пользователя. Это может быть любой пользователь, допустимый в данной системе.
- g:<gid>:<perms>
- Назначает ACL для доступа заданной группе. Здесь можно указать имя или код группы. Это может быть любая группа, допустимая в данной системе.
- m:<perms>
- Назначает маску эффективных прав. Маска — это объединение всех разрешений группы-владельца и всех записей пользователй и групп.
- o:<perms>
- Назначает ACL для доступа пользователям, не включённым в группу файла.
Пробелы не учитываются. Вместо (<perms>) необходимо указать сочетание символов r, w и x, обозначающих чтение (read), запись (write) и execute (исполнение) соответственно.
Если с файлом или каталогом уже связан ACL, и выполняется команда setfacl, в этот ACL добавляются новые правила или изменяются существующие.
Посмотрим установленные права:
[root@centos ~]# getfacl /var/log/nginx/access.log
getfacl: Removing leading '/' from absolute path names
# file: var/log/nginx/access.log
# owner: nginx
# group: nginx
user::rw-
group::r--
other::---
Чтобы назначить разрешения на чтение и запись пользователю mid, выполните:
[root@centos ~]# setfacl -m u:mid:r /var/log/nginx/access.log
проверяем:
[root@centos ~]# getfacl /var/log/nginx/access.log
getfacl: Removing leading '/' from absolute path names
# file: var/log/nginx/access.log
# owner: nginx
# group: nginx
user::rw-
user:mid:r--
group::r--
mask::r--
other::---
[root@centos ~]# su mid
[mid@centos ~]$ cat /var/log/nginx/access.log
test
как видим всё ок
Чтобы удалить все разрешения, данные пользователю, группе или всем остальным, используйте параметр -x и не указывайте никаких разрешений:
setfacl -x <rules> <files>
Например, чтобы удалить все разрешения, данные пользователю mid, выполните:
[root@centos ~]# setfacl -x u:mid /var/log/nginx/access.log
проверим:
[root@centos ~]# getfacl /var/log/nginx/access.log
getfacl: Removing leading '/' from absolute path names
# file: var/log/nginx/access.log
# owner: nginx
# group: nginx
user::rw-
group::r--
mask::r--
other::---
Рекурсивная установка прав
Для установки прав для всех файлов и директорий внутри директории используется параметр -R. Так как для того, чтобы читать файл необходимы права на чтение r, а для того чтобы читать директорию необходимы права на чтение и выполнение rx, то можно при указании прав вместо х указывать X. Флаг X устанавливает права на выполнение только для директорий и файлов, которые уже имеют право на выполнение. Флаг X вычисляется на момент запуска setfacl, поэтому в default правилах она интерпретируется как x.
Пример
Разрешить пользователю mid читать все файлы и просматривать директории в folder
.
1 |
setfacl -R -m d:u:mid:rwx,u:mid:rwX folder |
или
1 |
setfacl -R -m d:u:mid:rw,u:mid:rwX folder |
Обе команды имеют недостаток, который проявляется при создании новых файлов и директорий. Разница в том, что в первом случае пользователь mid получит право на выполнение всех новых файлов создаваемых в folder
и вложенных директориях, а во втором случае пользователь не сможет просматривать новые директории.