Ansibleを使用しています。ディレクトリとファイルのパーミッションを再帰的に設定する方法

ansible file-permissions

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


タイトルとURLをコピーしました