setfacl: Ці дві команди однакові?


10

У мене є сценарій розгортання (на основі capifony), який встановлює дозволи на конкретні сервери для установки Symfony2. Він містить дві наступні команди для цього для кількох каталогів:

setfacl -R -m u:www-data:rwx -m u:`whoami`:rwX app/cache
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwX app/cache

Ці дві команди знаходяться на сайті Symfony2 як спосіб виправити дозволи, однак вони виглядали на мене надзвичайно схоже. Тож я подивився на мапажі setfacl, і з того, що я міг зрозуміти, друга команда робить саме те, що робить перша з додатковою опцією (яку я не зовсім розумію). Моє запитання: чи правильне моє припущення? Якщо так, чи матиме це такий же ефект, якби я видалив першу команду?

Відповіді:


15

Перша команда змінить дозволи будь-яких раніше існуючих файлів / каталогів. -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), друга команда встановить дозволи? Якщо це не так, я повинен мати можливість пропустити другу команду?
Hosh Sadiq

1
@HoshSadiq - команда no -R- це рекурсивна команда, тому дозволи застосовуються. У -dстражники , якщо хто - то , щоб створити каталог або перемістити директорію в дерево пізніше , так що це теж буде мати цей ACL застосовується.
slm

Це чудово! Робить речі набагато зрозумілішими :) Дякую!
Хош Садік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.