The Ansible file/copy modules don't give you the granularity of specifying permissions based on file type so you'd most likely need to do this manually by doing something along these lines:
- name: Ensure directories are 0755 command: find {{ path }} -type d -exec chmod 0755 {} \; - name: Ensure files are 0644 command: find {{ path }} -type f -exec chmod 0644 {} \;
These would have the effect of recursing through
{{ path }}
and changing the permissions of every file or directory to the specified permissions.
Ansible: Как рекурсивно установить права доступа к файлам и каталогам
В ansible я могу сделать это:
file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes
И он рекурсивно устанавливает владельца, группу и разрешения на 0775 для всех каталогов и файлов по этому пути. Но я хочу установить для каталогов значение 0775, а для файлов - 0664. Есть ли какой-нибудь способ сделать это доступным?
5 ответов на вопрос
- Популярные
- Новые
- С комментариями
- Активные
file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes
установит каталоги на 755, а файлы на 644.
Если вы хотите использовать файл модуля в ansible, вы можете:
файл: dest = / foo / bar / somedir владелец = корневая группа = режим apache = 0644 recurse = yes
file: dest = / foo / bar / somedir owner = root group = apache mode = 0775
С помощью этого метода вы сначала устанавливаете весь файл (recurse = yes) на «644», а затем устанавливаете / foo / bar / somedir на «775».
Это не идеально, потому что это будет изменять ваши права доступа к каталогу каждый раз, когда вы играете в свою книгу. Но, по крайней мере, это идемпотент, а не команда модуля.
Если вы не хотите иметь «измененный» статус, вы можете использовать модуль stat. Он перечислит все файлы и каталог в / foo / bar / somedir, поэтому вы регистрируете ответ и затем делаете цикл только для этих файлов.
Я не уверен, какой смысл в том, чтобы устанавливать для каталогов значение 0775 ( rwxrwxr-x
), а для файлов - 0644 ( rw-r--r--
): каталоги с возможностью записи в группы, но не файлы?
Если вы намеревались установить для файлов значение 0664 ( rw-rw-r--
), чтобы гарантировать, что файлы не будут выполняться, а каталоги можно обойти, то есть элегантное решение, включающее только одну chmod
команду:
chmod -c -R ug=rw,o=r,a-x+X "{}"
Вот как это можно использовать в Ansible :
- name: recursive chmod example command: | chmod -c -R ug=rw,o=r,a-x+X "{}" register: chmod_status changed_when: chmod_status.stdout != "" with_items: - "/home/user/sample/dir"
chmod -c
печатает все изменения, которые мы можем удобно использовать для заполнения «измененного» статуса в Ansible . Я надеюсь, что это имеет смысл.
Чтобы изменить моды только при необходимости:
- name: make dirs 0755 command: find {{ your_path }} -type d ! -perm 0755 -exec chmod 0755 {} \; - name: make files 0644 command: find {{ your_path }} -type f ! -perm 0644 -exec chmod 0644 {} \;
Похожие вопросы
-
3
Мой файл заблокирован в Excel 2007, что происходит?
-
1
Как восстановить TrustedInstaller в качестве владельца каталога Program Files?
-
1
изменить разрешения для файлов и каталогов в домашнем каталоге
-
-
3
Как вы редактируете файл hosts в Windows 7
-
6
Изменить разрешения для файлов в Linux
-
2
только чтение файлов в Ubuntu
-
1
Дополнительно Проблемы с правами доступа к файлам / папкам в Windows 7 - владение?
-
6
Защита паролем папки
-
3
Как защитить личные файлы от других для просмотра / копирования в локальной сети
-
2
Как принудительно удалить файл в Windows 7?