それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

/etc/passwd と同一形式で文字列を暗号化(符号化)する。

/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 日からアカウントが使用不能になる日までの日数
  • 予約フィールド

参考サイト