Первая команда изменит разрешения любых ранее существующих файлов / каталогов. Команда -d
in 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--
app/cache
который содержит каталог с именемdev
, к нему будет применена первая команда, а не вторая? И если позже будет добавлен другой каталог (напримерprod
), вторая команда будет устанавливать права доступа? Если это не так, я должен пропустить вторую команду?-R
это рекурсивная команда, поэтому разрешения применяются. В-d
стражники , если кто - то , чтобы создать каталог или переместить директорию в дерево позже , так что это тоже будет иметь этот ACL применяется.