サーバー上にansible 2.1.0があり、そこではvagrantを介して展開し、PCでも展開しています。ロール「デプロイ」には次のものがあります。
- name: upload code
become: true
become_user: www-data
git: [email protected]:****.git
dest=/var/www/main
key_file=/var/www/.ssh/id_rsa
accept_hostkey=true
update=yes
force=yes
register: fresh_code
notify: restart php-fpm
tags: fresh_code
この場合、ansible 2.1.0でエラーが発生します。
fatal: [default]: FAILED! => {"failed": true, "msg": "Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user. For information on working around this, see https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user"}
私のPCで使用する2.0.1.0であり、通常はすべて-フォルダー/ var/www /に所有者およびグループwww-dataのフォルダーmainがあります
Become_user:www-dataのみを使用する場合、become_methodを使用する場合、become_user:www-dataを使用したSudo-同じエラーが発生しました
これを解決するには何が必要ですか?
問題はそれです www-data
は、マシンへの接続に使用するデフォルトの非ルートansibleユーザーが作成した同じファイルにはアクセスできません。また、エラーメッセージは ansibleのドキュメント を明確に示しています。これは、ansible 2.0以下からアップグレードするときにこの問題を修正する必要があるオプションを説明しています。
彼らは問題を適切に修正する3つの方法を提案しています:
- パイプラインを使用します。パイプラインが有効になっている場合、Ansibleはモジュールをクライアント上の一時ファイルに保存しません。代わりに、モジュールをリモートpythonインタープリターのstdinにパイプします。非Pythonモジュールではパイプラインは機能しません。
- 管理対象ホストにファイルシステムACLサポートをインストールします。リモートホストの一時ディレクトリがファイルシステムaclsが有効な状態でマウントされ、setfaclツールがリモートPATHにある場合、Ansibleはファイルシステムaclsを使用して、ファイルを誰でも読み取り可能にする代わりに、権限のない2番目のモジュールとモジュールファイルを共有します。
- 権限のないユーザーになって、リモートマシンでアクションを実行しないでください。 rootになるか、becomを使用しない場合、一時ファイルはUNIXファイルのアクセス権によって保護されます。 Ansible 2.1以降では、rootとして管理対象マシンに接続してから、権限のないアカウントに使用する場合、UNIXファイルのアクセス許可も安全です。
または、これらの修正のいずれも実行できない場合は、ansibleをもう少し安全でない方法(ansible 2以下ではデフォルトのように見えます)に強制することができます。これも問題を修正するはずですが、根本的な問題は修正しません。セキュリティリスク:
問題を解決するために上記の変更を行うことができず、実行中のマシンが十分に安全であると判断した場合、そこで実行したいモジュールは誰でも読めるようになります
allow_world_readable_tmpfiles
の中にansible.cfg
ファイル。設定allow_world_readable_tmpfiles
は、これをエラーから警告に変更し、2.1以前と同じようにタスクを実行できるようにします。
Debian/ubuntuでは、このansibleタスクのように、最初にリモートホストにacl
パッケージをインストールすることでこれを解決できます。
- name: install setfacl support
become: yes
apt: pkg=acl
Redhat/centosでも同じこと-リモートホストにacl
パッケージをインストールします。
- name: install setfacl support
become: yes
yum: name=acl