1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ChefTips: SALT付きSHA-512でパスワードのshadow hashを生成する

Posted at

解決したい課題

Chefでは、userリソースのpasswordプロパティにハッシュ化されたパスワードを記述することで、ユーザのパスワードを設定することができます。世の中のChefハウツー記事とかをみていると、パスワードをハッシュ化する方法として以下の MD5 でのハッシュを紹介している例が多いようです。

openssl passwd -1 "theplaintextpassword"

Chef社公式でも実際に紹介されていますし…
https://docs.chef.io/resource_user.html#password-shadow-hash

MD5は今から10年以上前から安全性の限界が言われており、MD5の使用は躊躇されるところであります。この記事では、SALT付きSHA-512でのパスワードハッシュ生成方法を紹介します。

実装例

unix-crypt というgemを利用します。
https://rubygems.org/gems/unix-crypt/versions/1.3.0

chef-client が使うrubyにgemをインストールする方法については別記事で紹介します。

sample recipe

require 'unix_crypt'

passwd   = "theplaintextpassword"
salt     = rand(36**16).to_s(36)
hashpass = UnixCrypt::SHA512.build(passwd, salt)

user "testuser01" do
  password hashpass
end

上記のrecipeで生成されたパスワードハッシュは /etc/shadow に格納されています。

$ grep testuser01 /etc/shadow
testuser01:$6$jf9jczpytkqh4d8d$cyeYxVzXZqXOdcaBFIEj4AB1u8jDKsTOdNZCtOq5EJQ09F6cdRcQg8Xril1iR5Rl4R3wzkyXlK.TM5roXyyDV1:17772:0:99999:7:::

このサンプルレシピは毎回ハッシュを生成するため、同じパスワード文字列を使っていても毎回userリソースが実行されることにご注意ください。

補足

SALT付きSHA-256でハッシュ化する場合

UnixCrypt::SHA512 から UnixCrypt::SHA256 への変更に加え、SALTを16桁から8桁に変更します。

require 'unix_crypt'

passwd   = "theplaintextpassword"
salt     = rand(36**8).to_s(36)
hashpass = UnixCrypt::SHA256.build(passwd, salt)

user "testuser01" do
  password hashpass
end

ちゃんとハッシュの冒頭が $5$ になっていることが確認できます。

$ grep testuser01 /etc/shadow
testuser01:$5$ma1rnyvi$77zJduFMQkEMHTurexnpCB.grZA/5b8xPFyRQZIb.MA:17772:0:99999:7:::

CentOS7でデフォルトのハッシュ化方式を変更・確認する

/etc/pam.d/system-authを直接確認・変更するより、authconfigコマンドを使用するほうが推奨されるようです。

$ authconfig --test | grep hashing
 password hashing algorithm is sha512
$ authconfig --passalgo=sha256 --update
$ authconfig --test | grep hashing
 password hashing algorithm is sha256

参考

Chefと/etc/shadowとRuby

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?