以前から、HP-UXでのパスワード設定を自動化、スクリプト化する方法について模索してきた。Teratermでpasswdコマンドを遅延入力してみたり、Linuxにあるchpasswdコマンドが無いかと調べてみたりしてきたが、今回の内容でexpectなど無しでもパスワードの設定、変更が自動化できそうだ。
といっても、大した事はしていない。そもそも、HP-UXしかり、Linuxしかり、usermodやuseraddのオプションで引数にハッシュ化したパスワードを指定するオプションが存在している。だから、パスワードをハッシュ化してこれらのコマンドにわたせばいいだけだ。
まずは以下のコマンドでパスワードのハッシュ値を取得する。
openssl passwd -crypt パスワード
実際に実行した結果がこちら。
# openssl passwd -crypt test1234
4PuD3.1AUSQVU
で、これをuseraddやusermodで使うだけだ。
useraddの場合(ユーザ作成時のパスワード設定の場合)
/usr/sbin/useradd -m -p ハッシュ化後のパスワード ユーザ名
usermodの場合(ユーザ作成後のパスワード設定の場合)
/usr/sbin/usermod -p ハッシュ化後のパスワード ユーザ名
それでは、実際にコマンドを実行してみよう。
# openssl passwd -crypt test1234
fa/k8bJvq6B6M
#
# /usr/sbin/useradd -m -p fa/k8bJvq6B6M test1234
#
# /usr/sbin/usermod -p fa/k8bJvq6B6M test1234
これで、test1234でログインできるかを確認する。
実際にTeratermでログインした後の画面がこちら。
無事、ログインすることができた。
なお、この手法はシャドウ前、シャドウ後でも比較して実行できることを確認済だ。
他のUNIX系マシンでも同様の対応ができると思う。
上記処理を一行で行う場合は、以下のように記述すると良いだろう。
useraddの場合(ユーザ作成時のパスワード設定の場合)
/usr/sbin/useradd -m -p $(openssl passwd -crypt パスワード) ユーザ名
usermodの場合(ユーザ作成後のパスワード設定の場合)
/usr/sbin/usermod -p $(openssl passwd -crypt パスワード) ユーザ名
なお、これらの対応は全てパスワードのハッシュアルゴリズムがmd5であるデフォルト状態の時のみ有効だ。
SHA-512に対応させるためにPHI11i3をインストールして/etc/default/securityの設定を変えた場合、上記の変更方法ではうまくいかない。
うまくいかないというか、別にパスワードの変更もできるし、ssh経由でのログインもできるのだが、md5のパスワードが/etc/shadowに保存されるからPHI11i3を入れる意味が無くなる。
プロジェクトのセキュリティポリシーにも違反するだろうし。
こういった手法の場合、PerlやPythonでのパスワード生成を行う事もできるのだが、HP-UXのデフォルトのライブラリがSHA-512に対応していないようで、それも不可能。
そもそも、HP-UXにはPythonバンドルで入ってないし。(クソだな)
この場合、自動スクリプト等を作成するには、別途対話式のスクリプトをPerlで記述するかライブラリの導入、もしくはexpect等の対話式プログラムをインストールする必要があるだろう。