説明
Ansible でファイルやディレクトリを作成するときに mode を明示しないと、権限が広すぎたり予測しにくかったりする場合があります。環境の umask やモジュールの動作によって実際の権限が変わるためです。
設定ファイルや秘密鍵などの機密ファイルは、意図より広い権限で作成されると、ほかのユーザーやプロセスに読み書きされるおそれがあります。既存の権限が維持される場合もあるため、実際の状態を確認する必要があります。
想定される影響
- 読み取り権限が広いと、機密情報が漏えいするおそれがあります。
- 環境ごとに権限が異なり、デプロイ結果が不統一になる場合があります。
- 別のユーザーによる設定ファイルの変更が、障害やセキュリティ上の問題につながる場合があります。
対処方法
- 作成する対象の用途に合わせて
modeを指定してください。8 進数の権限は"0600"のように引用符で囲んでください。 - 機密ファイルには所有者が必要とする最小限の権限を付け、所有者とグループも確認してください。ディレクトリへのアクセスには実行権限が必要なので、ファイルと同じ権限を一律に指定しないでください。
create: true、state: touch、state: directory、get_urlなどの作成操作と、デプロイ後の実際の権限を確認してください。
例
通常のファイルの権限を比較します。ダウンロード URL とパスを環境に合わせ、所有者とサービスの読み取り権限も確認してください。
変更前
yaml
- name: create config file without explicit permissions
ansible.builtin.lineinfile:
path: /etc/sample.conf
create: true
line: sample=true
- name: download file without explicit permissions
ansible.builtin.get_url:
url: https://example.com/file.txt
dest: /tmp/file.txt
権限を明示せずにファイルを作成するため、環境や既存の状態が結果に影響する場合があります。
変更後
yaml
- name: create config file with explicit permissions
ansible.builtin.lineinfile:
path: /etc/sample.conf
create: true
line: sample=true
mode: "0600"
- name: download file with explicit permissions
ansible.builtin.get_url:
url: https://example.com/file.txt
dest: /tmp/file.txt
mode: "0600"
mode: "0600" で所有者だけに読み書きを許可します。別のアカウントで読む必要がある場合は、そのサービスに必要な権限を別途設計してください。