acl - (Access Control List - списки контроля доступа)

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>) необ­хо­ди­мо ука­зать соче­та­ние сим­во­лов rw и 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.

или

Обе коман­ды име­ют недо­ста­ток, кото­рый про­яв­ля­ет­ся при созда­нии новых фай­лов и дирек­то­рий. Раз­ни­ца в том, что в пер­вом слу­чае поль­зо­ва­тель mid полу­чит пра­во на выпол­не­ние всех новых фай­лов созда­ва­е­мых в folder и вло­жен­ных дирек­то­ри­ях, а во вто­ром слу­чае поль­зо­ва­тель не смо­жет про­смат­ри­вать новые директории.