Щоб скористатись розширеними правилами необхідно, щоб файлова система була змонтована із опцією acl. Для цього необхідно або прописати опцію в fstab і перемонтувати розділ:
# vim /etc/fstab
...
# /media/free was on /dev/sda5 during installation
UUID=b0218d9d-3d5b-4598-a8ac-5bf90a0d2090 /media/free ext4 defaults,acl 0 2
...
Перемонтувати розділ можна таким чином (або просто перевантажити після додавання опцій в fstab):
# sudo mount -o remount /home
У випадку, якщо пакет acl відсутній - варто його встановити:
# apt-get install acl
Але, ймовірно, що він вже проінстальований у вашому дистрибутиві. Перевірити чи файлова система правильно змонтувалась можна так:
# mount | grep sda5
/dev/sda5 on /media/free type ext4 (rw,acl)
Перейдемо ближче до суті. Розглянемо роботу ACL із практичної сторони. Для цього створимо директорію lol і тестового користувача test:
$ cd /media/free
$ mkdir lol
$ ls -la | grep lol
drwxrwxr-x 2 ipeacocks ipeacocks 4096 жов 3 03:33 lol
$ useradd test
$ id test
uid=1001(test) gid=1001(test) groups=1001(test)
Звісно, що користувач test не зможе видалити директорію lol, користувача ipeacocks:
$ su test
$ rm -rf lol
rm: cannot remove ‘lol’: Permission denied
І це, насправді, дуже логічно, адже з виводу ls користувач не має права цього зробити. Проте все змінюється після надання таких прав за допомогою setfacl:
# setfacl -m u:test:rwx lol
Ls надалі показуватиме володарем файлу попереднього користувача (проте "+" вказує на розширені права):
$ ls -la | grep lol
drwxrwxr-x+ 2 ipeacocks ipeacocks 4096 жов 3 03:33 lol
Усю правду видасть getfacl:
$ getfacl lol
# file: lol
# owner: ipeacocks
# group: ipeacocks
user::rwx
user:test:rwx
group::rwx
mask::rwx
other::r-x
Отже тепер користувач test може зробити з директорією все, що йому заманеться - і навіть видалити його (звісно, якщо батьківський каталог має відповідні права):
$ rm -rf lol
$ ls
lost+found
ACL права також можна встановити одразу для групи користувача:
$ rm -rf lol
$ ls
lost+found
ACL права також можна встановити одразу для групи користувача:
# setfacl -m g:test:rwx,u:ipeacocks:rwx lol
І навіть перерахувати необхідні групи:
# setfacl -m g:test:rwx lol
# getfacl lol
# file: lol
# owner: root
# group: root
user::rwx
group::r-x
group:test:rwx
mask::rwx
other::r-x
Звичайно, що з такою ж легкістю можна права і забрати:
# setfacl -x g:test lol
# getfacl lol
# file: lol
# owner: root
# group: root
user::rwx
user:ipeacocks:rwx
group::r-x
mask::rwx
other::r-x
Варто також згадати про копіювання списків контроля доступу з одного файлу на інший:
# getfacl dir1 | setfacl -R -b -n -M - dir2
"-n" - вказує не перераховувати маску файла.
"-M -" - модифікує списки доступа, отримуючи дані з stdin
"-R" - рекурсивно.
Отже, підсумуємо:
"--set" - установка нових прав із затиранням попередніх
"-m" - (modify) додавання до існуючих прав нових
"-x" - видаляє указані права.
"-b"- затирає всі попередні ACL-права
Слід також зауважити, що ACL списки навіть зараз підтримують не всі програми. Наприклад, після архівування. використовуючи tar вони втратяться. Тому варто в такому випадку використовувати star або зберігти всі права і відресторити їх після розархівування:
# getfacl -R file > acl.backup
# setfacl --restore=acl.backup
https://help.ubuntu.com/community/FilePermissionsACLs
Немає коментарів:
Дописати коментар