4
2

More than 3 years have passed since last update.

Ansible userで毎回changedとなることを防ぐ

Last updated at Posted at 2020-06-05

毎回changedになる理由

- name: usermod postgres password
  user:
    name:     "postgres"
    password: "{{ user_passwd_postgres | password_hash('sha512') }}"

これをやってしまうと毎回ランダムなsaltでハッシュ化されたパスワードが生成されるため、都度chagned = Trueとなってしまう。

ランダムにしないためのsalt?

password_hash('sha512','salt')のように指定すると、毎回saltが固定されるためハッシュ化された値は同じになる。

- name: usermod postgres password
  user:
    name:     "postgres"
    password: "{{ user_passwd_postgres | password_hash('sha512','salt') }}"

しかしコレだとsaltがハードコーティングされていることになり、しかも全アカウントで同じsaltを利用すると脆弱になる。

ソルトの再利用
プログラマがパスワードをハッシュ化する際に毎回同じソルトを使用するケース。 この場合でも、既存のレインボーテーブルを無効化することはできる(ソルトの値が適切であれば)。ただし、広く使われている製品にソルトがハードコーディングされると、そこから抽出したソルトを使って新しいレインボーテーブルを生成できてしまう。 また、ソルトが固定だと、パスワードが同じユーザーはハッシュ値も同じになってしまう(ハッシュ値を作る際にユーザ名を混ぜ込んでいる場合を除く)。これにより、一つのハッシュ値で複数のユーザーを攻撃するのが容易になってしまう。

結論

- name: user add yamashtt
  user:
    name: yamashtt
    password: "{{ user_passwd_postgres | password_hash( 'sha512', user_passwd_postgres_salt ) }}"
    shell: /bin/bash

group_varsuser_passwd_postgres(平文のパスワード)と一緒にuser_passwd_postgres_saltも定義する。チームメンバーにはアカウント毎にsaltも変更するように周知する。

コメント募集 解決済み

本記事初投稿時に{{}}の中で{{}}を使う方法がわからずにコメントを募集していました。
以下はその記録です。投稿してわずか15分程で回答をいただけてしまいました。スバラシイ!!!

初投稿時に記載していた内容

- name: usermod postgres password
  user:
    name:     "postgres"
    password: "{{ user_passwd_postgres | password_hash('sha512','{{ user_passwd_postgres_salt }}') }}"

上記のように変数の中に変数をいれる(Linxuのevalみたいな)ことはできませんか?

いただいたコメント

コメントにて@akira6592さんよりサポートいただきました!ありがとうございます!

- name: usermod postgres password
  user:
    name:     "postgres"
    password: "{{ user_passwd_postgres | password_hash('sha512', user_passwd_postgres_salt ) }}"

{{}}の中では変数は全部展開されるんですね。わーお、スッキリ~!!

4
2
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2