新年明けましておめでとうございます!!!?
2018年もよろしくお願い致します。
新年一発目のブログは!?Ansibleでubuntuに対して実行したら出落ち並にハンパないエラー出たのでブログします。
■Error
1 2 3 4 5 6 7 |
TASK [common : install packages] ****************************************************************************************************** failed: [server01] (item=[u'git', u'vim', u'tree', u'zsh', u'htop',u'unzip']) => {"cache_update_time": 1515230793, "cache_updated": false, "changed": false, "item": ["git", "vim", "tree", "zsh", "htop"."unzip"], "msg": "'/usr/bin/apt-get -y -o \"Dpkg::Options::=--force-confdef\" -o \"Dpkg::Options::=--force-confold\" install 'tree'' failed: E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)\nE: Unable to lock the administration directory (/var/lib/dpkg/), are you root?\n", "rc": 100, "stderr": "E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)\nE: Unable to lock the administration directory (/var/lib/dpkg/), are you root?\n", "stderr_lines": ["E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)", "E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?"], "stdout": "", "stdout_lines": []} |
元々baseパッケージを使いたいため、gitやらvimなどなどインストールを始めに行っているのですが、そこでまずエラーが出てる状態。(完全に出落ち)エラー見ると
「/var/lib/dpkgにパッケージインストールしてもいいんだけど、あんたホントにrootなん?」
と疑ってる様子。ちなみに実行ユーザはsudoパスなしでrootになれるからrootだバカヤローと言いたいところ。–ask-sudo-pass付けても同様。
■ansible become
http://docs.ansible.com/ansible/latest/become.html
Ansible 2.0.x and below has a limitation with regards to becoming an unprivileged user that can be a security risk if users are not aware of it. Ansible modules are executed on the remote machine by first substituting the parameters into the module file, then copying the file to the remote machine, and finally executing it there.
Everything is fine if the module file is executed without using become, when the become_user is root, or when the connection to the remote machine is made as root. In these cases the module file is created with permissions that only allow reading by the user and root.
The problem occurs when the become_user is an unprivileged user. Ansible 2.0.x and below make the module file world readable in this case, as the module file is written as the user that Ansible connects as, but the file needs to be readable by the user Ansible is set to become.
・訳)
Ansible 2.0.x以下には、ユーザーがそれを認識していない場合にセキュリティ上のリスクとなり得る非特権ユーザーになることに関して制限があります。パラメータをモジュールファイルに代入からファイルをリモートマシンにコピーし、最後に実行することによってリモートマシン上で実行可能なモジュールが実行されます。
モジュールファイルがbecomeを使わずに実行された場合、become_userがrootの場合リモートマシンへの接続がrootとして行われた場合はすべて問題ありません。このような場合モジュールファイルはユーザーとrootによる読み取りのみを許可する権限で作成されます。
この問題はbecome_userが特権のないユーザーである場合に発生します。 Ansible2.0.x以下でモジュールファイルはAnsibleが接続するユーザーとして書き込まれますが、ユーザーが読み取り可能にする必要があります。
デフォルトでrootユーザにパスワード認証のログインができない!つまりPlaybookを実行時にroot権限が必要なPlaybookが実行できない場合がある。なので!対処方として、
・一般ユーザで接続からのsudoを利用してroot 権限を実行→◎
・root ユーザの公開鍵認証を登録し、root ユーザでログインできるようにする→☓(DANGER)
ということはymlにbecome: trueが入っていないのでは??
■server01.yml
1 2 3 4 5 6 7 8 9 10 11 |
- hosts: server01 roles: - common - mariadb - h2o - php7 - cron - sysctl - logrotate - fail2ban - mackerel-agent |
うむ!漏れだったw正しくは
1 2 3 4 5 6 7 8 9 10 11 12 |
- hosts: server01 become: true #忘れずに! roles: - common - mariadb - h2o - php7 - cron - sysctl - logrotate - fail2ban - mackerel-agent |
■確認
1 2 |
TASK [common : install packages] ******************************************************************************************************* ok: [server01] => (item=[u'git', u'vim', u'tree', u'zsh', u'htop',u'unzip']) |
■まとめ
一瞬で気づいてヨカタ。
0件のコメント