Solaris10 の/etc/shadow の暗号形式を変更して長いパスワードに対応させる.
先日の小江戸らぐオフな集まりの中で出た話でSolaris って昔は&デフォルトではパスワードに8文字までしか使えないけど今は設定すればもっと長いパスワードも利用出来るという話をしたりしたと思うんですが,追試してみました.
環境は,MacBook 上のVirtualBox#sun だし.
Solaris10 10/08 x86 です.
メモリは768MB とか積まないとzfs 利用できません.
更に実際GUI で使おうとすると1GB 程無いと辛いです.
Disk は16GB 程取ってみました.FS はせっかくなのでzfs.#zfs のコマンド覚えなきゃなー.
参考ドキュメント.
- Solaris 10 10/08新機能
http://sdc.sun.co.jp/events/nightSeminar/PDF/s10u6_nightseminar-20081218.pdf
そんなこんなでインストールして,GuestAddition もpkg があるのでpkgadd します.
ネットワークはNAT だとそのままでは外から入れないのでホストインターフェイスにして外のdhcpd から振り出して貰うようにしました.
ということで,先ずは標準状態でパスワードを変更してみます.今回は`password!123#P' という14文字のパスワード.
# passwd mk 新しいパスワード: password!123#P 新しいパスワードを再入力してください: password!123#P passwd: mk のパスワードが変更されました
一見14文字のパスワードが設定された様に見えますし,実際認証も通ります.
$ su - mk パスワード: password!123#P Sun Microsystems Inc. SunOS 5.10 Generic January 2005
しかし,パスワードを8文字目までしか入力しなくても認証は通ってしまいます….
$ su - mk パスワード: password Sun Microsystems Inc. SunOS 5.10 Generic January 2005
このときの/etc/shadow の該当エントリは以下のような状態.
mk:b3GPOfRG/2TAc:14273::::::
ということで,もっと長いパスワードに対応させることにします.
標準のパスワード形式を変更するには/etc/security/policy.conf を書き換えます.
# grep -v ^# /etc/security/policy.conf| uniq AUTHS_GRANTED=solaris.device.cdrw PROFS_GRANTED=Basic Solaris User CRYPT_ALGORITHMS_ALLOW=1,2a,md5,5,6 CRYPT_DEFAULT=__unix__
CRYPT_ALGORITHMS_ALLOW は標準以外に利用できるアルゴリズムです.
Σなんか5,6 ってのが増えてます.最近増えたのかな?
/etc/security/crypt.conf を参照すると,
1 crypt_bsdmd5.so.1 2a crypt_bsdbf.so.1 md5 crypt_sunmd5.so.1 5 crypt_sha256.so.1 6 crypt_sha512.so.1
となっているので,
な感じでしょう.
1 のMD5 はLinux やBSD と一緒なので互換性を考えるとこれが良いかもしれません.
この値をCRYPT_DEFAULT に設定します.
CRYPT_DEFAULT=1
標準では`__unix__' になっています.これはcrypt で8文字迄しか設定できません.
さて,これで準備は出来たのでパスワードを再設定してみます.今回も14文字の`password!123#P' を使います.
# passwd mk 新しいパスワード: password!123#P 新しいパスワードを再入力してください: password!123#P passwd: mk のパスワードが変更されました
14文字のパスワードで認証が通ります.
$ su - mk パスワード: password!123#P Sun Microsystems Inc. SunOS 5.10 Generic January 2005
パスワードを8文字目までしか入力しないと失敗します.
$ su - mk パスワード: password su: Sorry
ということで,9文字以上の設定が可能になりました.
このときの/etc/shadow の該当エントリは以下のような状態.
mk:$1$DBH8e/Ui$ib9dmIfsLw8SnpzMfs9Pi.:14273::::::
$1$ から始まるのでMD5 ということが解ります.
ちなみに,その後ろの$ で囲まれた`DBH8e/Ui'部分がsalt です.
以下のようにしても出せます.
$ perl -e "print crypt(\"password\!123#P\",'\$1\$DBH8e/Ui\$').\"\n\"" $1$DBH8e/Ui$ib9dmIfsLw8SnpzMfs9Pi.
#Mac のPerl だとMD5 引いてくれなくてcrypt の値が出ちゃいましたorz
さて,Linux/BSD と互換性があるはずなのでLinux マシンのshadow をこの内容と置き換えてみます.
以下Debian lenny なatom マシンです.
$ sudo -s # export EDITOR=vi # vipw -s # grep ^mk: /etc/shadow mk:$1$DBH8e/Ui$ib9dmIfsLw8SnpzMfs9Pi.:14129:0:99999:7::: # exit $ su - mk Password: password!123#P $ whoami mk
ということで問題ありませんでした.
ちなみに,__unix__ のshadow を持って行っても同様に認証に成功しました.
しかし,間違った事書いてないか一寸不安.
間違いとか有ったら教えて下さい.
#後は,Blowfish やsha やらのLinxu 対応を確認したいですね.