好奇心を追いかけて

Chasing My Curiosities

Ansibleでユーザーのパスワードを設定する際の注意点(Linux / Windows)

課題

ansibleでOSのユーザーを作成する際、Linuxであればuserモジュール、Windowsであればwin_userモジュールを使用する。例えば次のように書けばよい。

-name: create linux user
  user:
    name: alice
    uid: 1010
    group: admin
    password: "{{ user_pass }}"

- name: create windows user
  win_user:
    name: bob
    password: "{{ user_pass }}"
    groups:
      - Administrators
      - Users

ただしパスワードの取り扱いがそれぞれ異なるので注意が必要となる。userモジュールでは平文でパスワードを指定するとエラーになるため、事前にハッシュ化しなければならない。一方win_userモジュールではハッシュ化しているとエラーになり、平文を受け付けている。ドキュメントには次のように記載されている。

Linux/Unix/POSIX: Enter the hashed password as the value. (userモジュール)

Optionally set the user’s password to this (plain text) value. (win_userモジュール)

したがって、面倒だが上の例ではuser_pass変数で使用する値をOSごとに区別しなければならない。

解決方法

Linuxの場合

mkpasswdコマンドでSHA512ハッシュにエンコードするのが一般的だと思う。

# コマンド実行後、PWを入力
mkpasswd --method=sha-512

出力されたハッシュ値をコピーして変数の値とする。Linuxグループを作って処理を分けることを想定し、group_vars/Linux/user_vault.ymlファイル等に記載すればよい。

user_password: $6$...

Windowsの場合

平文をコード内に記載するのは避けるべきだろう。AnsibleでPWを秘匿するにはAnsible Vaultを使えば良い。Linuxと同様にWindowグループを作って処理を分ける想定であればgroup_vars/Windows/user_vault.ymlに暗号化したファイルを作成する。

# 暗号化したファイルを作成 (viエディタが開く)
ansible-vault craete group_vars/windows/user_vault.yml

# ----------
# 記載内容 (今回は適当にhoge123!を設定)
user_password: hoge123!
# ----------

暗号化した内容を確認したり編集したりすることもできる。

# 確認
ansible-vault view group_vars/Windows/user_vault.yml

# 編集
ansible-vault edit group_vars/Windows/user_vault.yml

まとめ

AnsibleでOSアカウントのPWを設定する際、userモジュールは事前にハッシュ化が必要。win_userモジュールは平文で指定が必要。