perl, php, python の標準モジュールで /etc/shadow の hash を生成する方法
※追記
/etc/shadow の hash を生成するコマンドを作りました - tkuchikiの日記
で環境依存しない方法を紹介しています。
useradd や chef の user resource で password を設定するときに必要になる、
/etc/shadow の hash を生成する方法です。
/etc/shadow については、
- ひつまぶし食べたい: /etc/shadowについて勉強してみた
- http://techs-empty.tumblr.com/post/14348640038/chef-etc-shadow-ruby
などのページを読むと理解が深まると思います。
hash 生成方法
perl, php, python での生成方法は以下のとおりです。
perl
$ perl -E 'say crypt("PASSWORD", "\$6\$". crypt(rand, rand 100))'
php
$ php -r 'echo crypt("PASSWORD","$6$".sha1(uniqid(mt_rand(),true))), PHP_EOL;' # sha512 版 $ php -r 'echo crypt("PASSWORD","$6$".hash("sha512", uniqid(mt_rand(),true))), PHP_EOL;'
※追記
history にパスワードが残るという意見をいただいたので、github から script を取ってきて実行する方法を用意しました。
$ curl -s https://raw.githubusercontent.com/tkuchiki/encrypt-password/master/encrypt.sh | sh Enter password: $6$eVuwo0XKesWWkbv3$/L.Sw8RJuk69aamprVSN.id2tCWJ0OiSmRJ12JNyahAdPopx7aHOWDvZ/PYustFFQ6Eu7vp22FYLqvXTUIo9I0 $ curl -s https://raw.githubusercontent.com/tkuchiki/encrypt-password/master/confirm.sh | sh Enter password: Enter same password again: $6$eVuwo0XKesWWkbv3$/L.Sw8RJuk69aamprVSN.id2tCWJ0OiSmRJ12JNyahAdPopx7aHOWDvZ/PYustFFQ6Eu7vp22FYLqvXTUIo9I0
python
$ python -c 'import crypt, random, hashlib; random.seed(); print crypt.crypt("PASSWORD", "$6$" + hashlib.sha1(str(random.random())).hexdigest())';
注意点
salt のランダム値の生成が雑で、セキュアではないかもしれません(特に perl)。
また、perl と python の方法は、Mac OSX 上で実行しても正しい結果が得られませんので Linux 上で実行してください。
これは、Mac OSX の crypt は sha512 に対応していないためのようです。
したがって、sha512 に対応したモジュールを入れれば Mac OSX でも生成できます。
perl, python それぞれの生成方法は以下のページが参考になります。
追記
id:Songmu さんから、いただいたブコメ(http://b.hatena.ne.jp/Songmu/20150122#bookmark-239785341) を参考に mkunixcrypt と unix-crypt の例を載せます。
コメントありがとうございました。
mkunixcrypt
unix-crypt を入れて、mkunixcrypt をそのまま実行するだけです。
$ gem install unix-crypt $ mkunixcrypt Enter password: Verify password: $6$..........................................
-p をつければ、一発で生成できますが、insecure と言われます。
$ mkunixcrypt -p PASSWORD warning: providing a password on the command line is insecure $6$..........................................