Перша команда змінить дозволи будь-яких раніше існуючих файлів / каталогів. -d
У другій команді має вирішальне значення для установки за замовчуванням дозволу йти вперед для будь-яких каталогів, які , в свою чергу , забезпечать набір за замовчуванням списків ACL для всіх файлів в цих каталогах.
ПРИМІТКА. Це в обох випадках команди виконуватимуться рекурсивно через -R
комутатор.
Щодо -d
перемикача, зі setfacl
сторінки man:
-d, --default
All operations apply to the Default ACL. Regular ACL entries in the
input set are promoted to Default ACL entries. Default ACL entries
in the input set are discarded. (A warning is issued if that happens).
Цей уривок також досить добре пояснює:
Існує два типи ACL: доступ до ACL та ACL за замовчуванням. ACL доступу - це список контролю доступу для певного файлу чи каталогу. ACL за замовчуванням може бути асоційований лише з каталогом; якщо файл у каталозі не має доступу ACL, він використовує правила ACL за замовчуванням для каталогу. ACL за замовчуванням не є обов'язковим.
Джерело: 8.2. Налаштування доступу ACL .
Приклад
Скажіть, у мене є ця структура каталогів.
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
Тепер давайте встановимо дозволи, використовуючи першу setfacl
команду у вашому запитанні:
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
Результатом чого є:
$ getfacl dir1/ file1
# file: dir1
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
Без -dR
команд, запущених тут, ваші ACL-файли не охоплюватимуть нові каталоги:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
Але якщо ми видалимо цей каталог і запустимо setfacl -dR ...
команду і повторимо цю операцію вище:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
Тепер дозволи виглядають зовсім інакше:
$ getfacl dir1/ file1
# file: dir1/
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
А тепер наш новостворений каталог підбере такі "дозволені" дозволи:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
Після ввімкнення dir2
цих дозволів тепер буде також застосовано ці дозволи на файли всередині dir2
:
$ touch dir2/fileA
$ getfacl dir2/fileA
# file: dir2/fileA
# owner: saml
# group: saml
user::rw-
user:saml:rwx #effective:rw-
user:samtest:rwx #effective:rw-
group::rwx #effective:rw-
mask::rw-
other::r--
app/cache
який містить каталог, який називаєтьсяdev
, до цього буде застосована перша команда, а не друга? І якщо пізніше буде доданий інший каталог (наприкладprod
), друга команда встановить дозволи? Якщо це не так, я повинен мати можливість пропустити другу команду?