SolarisのSSHをOpenSSHに

というわけで対身内なセキュリティ対策をしなければならなくなったのでSSHでのログインに制限をつけることにしました。
ユーザは全てのコマンドを実行できる更新用ユーザreleaseとファイル閲覧しかできない閲覧用ユーザviewに分離。閲覧用ユーザはrbashで使えるコマンドを大幅にしぼってあります。
で、更新用ユーザを特定の端末から以外入れなくしたいので/etc/ssh/sshd_configに以下を追加。

AllowUsers view release@192.168.1.106 release@192.168.1.107

RedHat Linux ES2.1は当然問題なく動くのだが何故かSolaris9が動かない・・・sshd_configのmanを見たらAllowUsersでUSER@HOSTの書式が使えない模様。どうもSunSSHは相当古いバージョンのOpenSSHが元になっているようです。がっくり。
仕方ないのでOpenSSHをインストールすることに。手順は以下の通り。

  • パッケージの入手

本当はmakeするべきなんだろうけど時間もコンパイラもないので出来合いを使います。ftp.sunfreeware.comからopenssh-3.9p1-sol9-sparc-local.gzとopenssl-0.9.7d-sol9-sparc-local.gzを入手。

  • パッケージのインストール

スーパーユーザで以下を実行。

# gunzip ./openssl-0.9.7d-sol9-sparc-local.gz
# gunzip ./openssh-3.9p1-sol9-sparc-local.gz
# pkgadd -d ./openssl-0.9.7d-sol9-sparc-local
# pkgadd -d ./openssh-3.9p1-sol9-sparc-local

これだけでインストール完了。

  • 設定

設定ファイルは/usr/local/etc以下にある・・・が面倒なので/etc/ssh以下の各ファイルにリンクを張ってしまう。SunSSHのオプションは古いものが多いので削っておくこと。
私の場合MaxAuthTriesLog、CheckMail、PAMAuthenticationViaKBDInt、RhostsAuthenticationをコメントアウトした。

  • ユーザsshdの作成

version 3.8p1あたりからPrivilege separation(特権分離)がデフォルトでONになっているため、ユーザsshdを作成する。
スーパーユーザで以下を実行。

# mkdir /var/empty
# chown root:sys /var/empty
# chmod 755 /var/empty
# groupadd sshd
# useradd -g sshd -c 'sshd privsep' -d /var/empty -s /bin/false sshd
  • 起動ファイルの差し替え

/etc/init.d/sshdシェルスクリプトで、内部でsshdのバイナリを呼び出す形になっているので各コマンドへのパスを書き換えるだけで使いまわすことができる。
/etc/rc3.dとかにおいてある場合はそちらの変更も忘れずに。

以下のコマンドで起動。restartオプションはSIGHUPするだけなので不可。

# /etc/init.d/sshd stop
# /etc/init.d/sshd start

参考文献: