SSHでchroot環境を構築してみる -- 2007-04-09
SSH(SFTPも)でchrootな環境を構築してみました。ネット上で調べてみるとOpenSSH-chrootの情報が多かったのですが、ちょっと不便そうなので認証フレームワークであるPAMの設定変更で構築することにしました。
環境はVine 4.0 + OpenSSH 4.5p1-0vl1 + PAM 0.99.3.0-0vl4 (2007年1月現在)で行いました。
あと、Vine 3.2 + OpenSSH 4.5p1-0vl1 + PAM 0.77-38vl2.1で行いました。通常、Vine 3.2のOpenSSHは3.9なのですが、sshdの設定でMatchブロックが使いたかったのでVine 4.1用のSRPMから作成しました。
環境設定はhttp://www.asahi-net.or.jp/~AA4T-NNGK/jail2.htmlを参考にしました。きっちりしたchroot環境を構築されています。解説も詳しいです(^^;。
chrootな環境とは
chrootな環境とは、ユーザーがログイン時に利用できる環境をシステムから閉じこめてしまう環境です。なぜこのような環境が必要かというと、ProFTPなどではchroot設定が簡単にでき、サーバにログインしたユーザーがホームディレクトリより上を参照できないようにできますが*1、OpenSSHでのsftpではそれができません。
従って、必要最小限のディレクトリ構成を準備して、その中にユーザーを閉じこめてしまいます。
やり方を私が調べた限りではOpenSSH-chrootまたはPAMでの方法があるようです。前者の方法ではSSHを再コンパイルする必要があり、パッケージ管理の観点からもめんどくさいのでPAMで実現する方法を選びました(実際PAMで実現する方が柔軟性があると思います)。
最小限のchroot環境を作成
基本設定 | |
chrootでのルートディレクトリ | /pam-jails/ |
対象ユーザー | dobu |
グループ | dobu |
この設定に従うと、dobuのホームディレクトリは/pam-jails/home/dobu/になります。
ディレクトリの作成
まずは/pam-jails/以下に必要なディレクトリを作成します。パーミッションは本来のディレクトリに合わせます。ここでの目的はSFTPが使える環境の構築です。
/pam-jails/ bin/ dev/ etc/ profile.d/ security/ home/ dobu/ lib/ i686/ usr/ bin/ lib/ i686/ libexec/
最小限のプログラムのコピー
ディレクトリが作成されたところで最小限のプログラム本体をコピーします。
bin/ | bash, cat, egrep, grep, hostname, ls, more, pwd, sh |
usr/bin/ | [, groups, id, test, which |
ここでいう最小限のプログラムとはSSHでログインできて変なエラーが出ない、ということを指します。その他作業に必要な物があればコピーしましょう。
ダイナミックリンクライブラリのコピー
プログラムだけでは動かないので必要なダイナミックリンクライブラリをコピーします。
- ネットワークサービスまわりのライブラリ(Vine-4.0)
シンボリックリンク 実ファイル lib/ libnsl.so.1 libns-2.3.4.so libnss1_dns.so.1 libnss1_dns-2.3.4.so libnss1_files.so.1 libnss1_files-2.3.4.so libnss_dns.so.1 libnss1_dns.so.1 libnss_dns.so.2 libnss_dns-2.3.4.so libnss_files.so.1 libnss1_files.so.1 libnss_files.so.2 libnss_files-2.3.4.so
sshdの設定
/etc/sshd_config
sshdの挙動を設定します。
UsePAM yes ChallengeResponseAuthentication no
を設定します。
PAMの設定
本来のシステムのPAM設定ファイルを修正します。
/etc/pam.d/sshd
sshでのPAMの挙動を定義します。
#%PAM-1.0 auth include system-auth account required pam_nologin.so account include system-auth password include system-auth session include system-auth session required pam_loginuid.so session required pam_chroot.so <-- この行を追加
/etc/security/chroot.conf
pam_chroot.soモジュールの設定ファイル。正規表現でユーザー名を指定するようです。
# /etc/security/chroot.conf # format: # username_regex chroot_dir ^dobu$ /pam-jails
chroot環境に必要なファイルのコピー
PAMモジュールで必要なものをコピーします。
# cp -a /etc/security/pam_env.conf /etc/security/console.perms /pam-jails/etc/security