Ansible:ディレクトリとファイルのアクセス許可を再帰的に設定する方法


52

ansibleでは、これを行うことができます:

file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes

また、そのパス内のすべてのディレクトリとファイルの所有者、グループ、およびアクセス許可を再帰的に0775に設定します。しかし、ディレクトリを0775に、ファイルを0664に設定したいのですが、これを可能にする方法はありますか?


回答:


33
file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes

ディレクトリを755に、ファイルを644に設定します。


これはファイルでは機能しません。
mirza

1
@アダムチャンス魔法はどこですか?u、g、oを指定すると数値とどのように違いますか(そして644はどこに書かれていますか?)
linuxbandit

4
ソースコードでは、シンボリックugoの処理は「man chmod」の処理と同じであることが記載されています。大文字のXには、dir / fileステータスと既存の実行ビットに基づいた特別な処理があります。github.com/ansible/ansible/blob/...
マルク・Tamsky

2
言い換えれば、Xあるxディレクトリ、およびファイルのための何のために。そして、それがモード文字列を処理する方法chmodではありませんansible。私の願いはS同様に扱われます。
x-yuri

1
ただし、所有者がallで実行可能なファイルを実行できることに注意してください。
X-ゆり

25

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


@luckytaxi gmanginが提供する答えは、サブディレクトリのパーミッションを再帰的に設定しません。
デジェイクレイトン

ああ、あなたは正しいです!私は1つのrecurseオプションを見ましたが、他のオプションは見ませんでした。
luckytaxi

9

モジュールファイルをansibleで使用する場合、次のことができます。

ファイル:dest = / foo / bar / somedir owner = root group = apache mode = 0644 recurse = yes

ファイル:dest = / foo / bar / somedir owner = root group = apache mode = 0775

この方法では、最初にすべてのファイル(recurse = yes)を「644」に設定し、次に/ foo / bar / somedirを「775」に設定します。

これは、プレイブックを再生するたびにディレクトリのアクセス許可が変更されるため、完全ではありません。しかし、少なくともそれはi等であり、モジュールコマンドとは異なります。

「変更済み」ステータスにしたくない場合は、モジュールの統計情報を使用できます。/ foo / bar / somedirにあるすべてのファイルとディレクトリがリストされるので、答えを登録してから、それらのファイルのみでループを作成します。


7
答えは、すべてのサブファイルとサブディレクトリを644に設定し、最上位ディレクトリのみを775に設定します。サブディレクトリを含むすべてのディレクトリが775である必要があります。
エドワードネッドハーヴェイ

この提案はi等ではありません。最初にアクセス許可を1つの値に設定し、後で別の値に設定すると、実行ごとにアクセス許可が変更されます。
ケビンキーン

5

ディレクトリを0775(rwxrwxr-x)に設定し、ファイルを0644(rw-r--r--)に設定することの意味がわからない:グループ書き込み可能ディレクトリ(ファイルではない)?

ファイルを0664(rw-rw-r--)に設定して、ディレクトリがトラバース可能な間はファイルが実行されないようにする場合は、1つの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 -cAnsibleに「変更済み」ステータスを設定するために便利に使用できるすべての変更を出力します。理にかなっているといいのですが。


3

必要な場合にのみ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 {} \;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.