HP-UXでパスワード変更の自動化(expect無し・デフォルト状態)

以前から、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等の対話式プログラムをインストールする必要があるだろう。