Ansibleでユーザパスワード設定
こんにちは當間です。お久しぶりです
書きたい事があるという技術部スタッフの執筆者が増え、中々私の番が回ってこないまま半年が経ってしまいました
Ansible 2.0 release からもう1年経ってしまいますが、このまま初歩からゆっくり紹介していきます
前回でAnsible環境の導入とユーザ追加まで行いました
今回はcrypted passwordの項になります
userモジュールのpassword
ansibleのuserモジュールでユーザを追加する際にpasswordも併せて指定できますが、受け取った値をhash化せずそのまま/etc/shadowへ設定される形になるため、パスワード不一致によりログインできません
実証開始
例としてパスワードはグレートなユーザパスワード、略して’gre-user-w0rd’とします
$ vi site.yml ################################################## --- - hosts: target vars: - username: hoge - password: gre-user-w0rd tasks: - name: Add User user: name={{ username }} password={{ password }} ##################################################$ ansible-playbook -i hosts site.yml -K SUDO password: PLAY [target] ********************************************* TASK [setup] ********************************************* ok: [blog2] TASK [Add User] ***************************************** changed: [blog2] PLAY RECAP ******************************************** blog2 : ok=2 changed=1 unreachable=0 failed=0changedとなり、hogeユーザにパスワードが設定されたようなので確認してみます
$ ssh blog2 $ sudo tail -1 /etc/shadow hoge:gre-user-w0rd:17161:0:99999:7:::本来ここには$6$540Gov6cPiX553CP$v(省略)等とハッシュ化された文字列が格納されるべきですが、希望したグレートなユーザパスワード、gre-user-w0rdが平文で記載されています。
$ ssh blog2 -l hoge hoge@blog2's password: Permission denied, please try again.当然このままではパスワード不一致となり追加ユーザではログインできません
実証ここまで
sha-512でhash化
というわけでグレユザワードをhash化する必要があります
今回対象サーバのblog2はCentOS6.8なので$ cat /etc/redhat-release CentOS release 6.8 (Final) $ authconfig --test | grep hash password hashing algorithm is sha512hashアルゴリズムはsha512にて実施します
CentOS6ならgrub-cryptコマンドを使うのが手っ取り早いですね$ grub-crypt --sha-512 Password: Retype password: $6$K.onA0aje27YvjAT$dJcXdkgB2nYACprLyUJnsdj/UIMptOyS500VtvzqlaDtGiivA1g.cvZSyz5SEPFgJDycgnV84.VCT0fdfHWev.上記hash化したグレユザワードをplaybookに記載しましょう
sha-512でhash化したユーザパスワードを設定する
$ vi site.yml ################################################## --- - hosts: target vars: - username: hoge - password: '$6$K.onA0aje27YvjAT$dJcXdkgB2nYACprLyUJnsdj/UIMptOyS500VtvzqlaDtGiivA1g.cvZSyz5SEPFgJDycgnV84.VCT0fdfHWev.' tasks: - name: Add User user: name={{ username }} password={{ password }} become: yes ##################################################$ ansible-playbook -i hosts site.yml -K SUDO password: PLAY [target] ****************************************************************** TASK [setup] ******************************************************************* ok: [blog2] TASK [Add User] **************************************************************** changed: [blog2] PLAY RECAP ********************************************************************* blog2 : ok=2 changed=1 unreachable=0 failed=0対象にログインして確認します
$ ssh blog2 $ sudo tail -1 /etc/shadow hoge:$6$K.onA0aje27YvjAT$dJcXdkgB2nYACprLyUJnsdj/UIMptOyS500VtvzqlaDtGiivA1g.cvZSyz5SEPFgJDycgnV84.VCT0fdfHWev.:17161:0:99999:7:::hash化されたパスワードが格納されているので、実際にログイン確認してみます
$ ssh blog2 -l hoge hoge@blog2's password: $ whoami hoge追加したhogeユーザとそのパスワード、グレユザワードでログインできました!
しかし、playbookに記載するhash化パスワードを別途手動で実行して用意するのは手間ですし、hash化する前のパスワードを忘れてしまうとアウトです。
CentOS7にはgrub-cryptコマンドがないので、そちらもネックとなります。
パスワードを考えるのもmkpasswdコマンドがあると便利ですがデフォルトで導入されてないのが普通です。次回
というわけで次回は、
- パスワードを別途hash化しなくても済む方法
- ランダムパスワードを作成
このあたりについて書いていきます