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 как способ исправить разрешения, однако они выглядели поразительно похожими на меня. Итак, я взглянул на man-страницы setfacl, и из того, что я мог понять, вторая команда делает именно то, что первая делает с дополнительной опцией (которую я не совсем понимаю). Мой вопрос, верно ли мое предположение? Если так, будет ли это иметь тот же эффект, если я уберу первую команду?

Хош Садик
источник

Ответы:

15

Первая команда изменит разрешения любых ранее существующих файлов / каталогов. Команда -din in имеет решающее значение для установки разрешений по умолчанию для любых каталогов, что, в свою очередь, предоставит набор ACL по умолчанию для любых файлов в этих каталогах.

ПРИМЕЧАНИЕ. В обоих случаях команды будут выполняться рекурсивно через -Rкоммутатор.

Что касается -dпереключателя, со setfaclстраницы руководства :

   -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--
SLM
источник
Ах, так что просто для подтверждения, вы имеете в виду, если у нас есть каталог, app/cacheкоторый содержит каталог с именем dev, к нему будет применена первая команда, а не вторая? И если позже будет добавлен другой каталог (например prod), вторая команда будет устанавливать права доступа? Если это не так, я должен пропустить вторую команду?
Хош Садик
1
@HoshSadiq - нет, -Rэто рекурсивная команда, поэтому разрешения применяются. В -dстражники , если кто - то , чтобы создать каталог или переместить директорию в дерево позже , так что это тоже будет иметь этот ACL применяется.
SLM
Замечательно! Делает вещи намного понятнее :) Спасибо!
Хош Садик