ansibleでは、こんなことができます
file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes
そして、そのパス内のすべてのディレクトリとファイルの所有者、グループ、およびパーミッションを再帰的に0775に設定します。しかし、私はディレクトリを0775に、ファイルを0664に設定したいのです。ansibleにこれをさせる方法はありますか?
68 None 2016-01-11
file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes
とすると、ディレクトリは755、ファイルは644に設定されます
55 Adam Chance 2018-04-27
Ansible のファイル/コピーモジュールでは、ファイルの種類に応じてパーミッションを細かく指定することができないので、ほとんどの場合、以下のようにして手動で指定する必要があります
- 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 {} \;
これらは、
{{ path }}
を再帰し、すべてのファイルやディレクトリのパーミッションを指定されたパーミッションに変更する効果があります
ソースはこちらです。https://stackoverflow.com/a/28782805/1306186
28 Zulakis 2016-02-24
ansibleでモジュールファイルを使いたい場合は
file: dest=/foo/bar/somedir owner=root group=apache mode=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 にあるすべてのファイルとディレクトリをリストアップしてくれるので、答えを登録してからそれらのファイルだけにループを作ります
11 gmangin 2016-09-15
ディレクトリを0775(rwxrwxr-x
)に、ファイルを0644(rw-r--r--
)に設定するのがどれだけ意味があるのかよくわからない: グループで書けるディレクトリは書けるけど、ファイルは書けない?
ディレクトリがトラバース可能な間はファイルを実行できないようにするためにファイルを 0664 (rw-rw-r--
) に設定したのであれば、 chmod
コマンドを一つだけ使うエレガントな解決策があります
chmod -c -R ug=rw,o=r,a-x+X "{{top_dir}}"
Ansibleでの使い方を紹介します
- name: recursive chmod example
command: |
chmod -c -R ug=rw,o=r,a-x+X "{{item}}"
register: chmod_status
changed_when: chmod_status.stdout != ""
with_items:
- "/home/user/sample/dir"
chmod -c
は、Ansibleで「変更された」ステータスを入力するのに便利な変更点をすべてプリントしています。意味があることを願っています
5 Onlyjob 2016-10-24
必要な時だけMODを変更すること
- 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 {} \;
4 sjas 2017-05-07
より現代的なアプローチは、まず、このように汚れをフィルタリングすることでしょう
- name: Evaluating home dirs
find:
path: "/home"
file_type: "directory"
register: homedirs
# This returns the actual dir-path's
- set_fact:
homes: "{{ homedirs.files | map(attribute='path') | list }}"
- name: Changing permissions of /home/*
file:
path: "{{ item }}"
mode: 0700
with_items:
- "{{ homes }}"
注: “file_type” パラメータを “file” に変更してください
1 phuturer 2020-03-30
例として、仮想のJoomla!インスタンスを「確保」するかのように
- name: Ensure to secure the Joomla installation
shell: "find . -type d -exec chmod 755 {} \\; && find . -type f -exec chmod 644 {} \\; && chown -R www-data: cache modules images media modules logs tmp administrator/cache"
args:
chdir: "{{ production_backend_root_path }}"
tags:
- joomla_secure
root は、ウェブサーバが所有するいくつかの指定されたディレクトリを除いて、すべてを所有しています
0 Moises Jafet 2020-02-14