/etc/passwd (shadow)ファイルにある、パスワードのCrypt暗号されたもの。
同じ文字列を作り出すには、どうすればいいか。ユーザーの自動登録や管理プログラムを書いているとuseradd コマンド呼び出すのが面倒だったりする。ユーザーのパスワードはまとめて作って登録したい。そもそもパスワードのためだけの専用管理画面とかが作られていて頭を抱えたりする。まとめて/etc/passwd と/etc/shadow 作ってhg配布して終り。って感じにしたい。
参考サイトに答えがずばり載っていた。
passwd と同じ符号の文字列を作る
パスワードを暗号化してshadow文字列を作る
takuya@KURO-BOX:~$ ruby -e 'p "hogehoge?".crypt("$1$54G3dTr")' "$1$54G3dTr$CdPahJqQEs3A.yGmbJsUU/"
perl でも出来るよ。
専用コマンドmkpasswdでもできるよ。
mkpasswd で作る場合
takuya@localhost: ~/$ printf "hoge" | mkpasswd -s -m md5 $1$rvASWBex$8xyBPJyvl0fzPheOO9.yS/
パスワードの符号化方式
$1$は ハッシュを求めるのに MD5 を使っていることを示しています
Debain見てみた
takuya:$1$45w67WKn7va$Qt8azTzIjjDbHS1bNP.8M1:14879:0:99999:7:::
たしかに$区切りで文字が入ってる
$区切り読み方
takuya:$符号化$ソルト$ハッシュ:パスワードの変更日時や有効期限(下記参照)
詳しくは man を引く
man shadowみてみた
shadow のパスワード以外の区切りの値の意味。
左から順に 区切り文字 ":"
- ログイン名
- 暗号化されたパスワード (パスワードは$区切りになってる)
- 1970 年 1 月 1 日から、最後にパスワードが変更された日までの日数
- パスワードが変更可能となるまでの日数
- パスワードを変更しなくてはならなくなる日までの日数
- パスワード有効期限が来る前に、ユーザが警告を受ける日数
- パスワード有効期限が過ぎてからアカウントが使用不能になるまでの日数
- 1970 年 1 月 1 日からアカウントが使用不能になる日までの日数
- 予約フィールド