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
  • 2a -> Blowfish
  • md5 -> Sun MD5
  • 5 -> sha256
  • 6 -> sha512

な感じでしょう.
1 のMD5LinuxBSD と一緒なので互換性を考えるとこれが良いかもしれません.
この値を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.

MacPerl だと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 対応を確認したいですね.