web-dev-qa-db-ja.com

Become / become_userを使用してAnsible 2.1.0が一時ファイルに権限を設定できない

サーバー上に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-同じエラーが発生しました

これを解決するには何が必要ですか?

27
DeamonMV

問題はそれです 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以前と同じようにタスクを実行できるようにします。

17
SztupY

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
45
Justin Ludwig