* SSHでchroot環境を構築してみる -- 2007-04-09 [#e084ab47]
 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な環境とは [#p6be8899]
 chrootな環境とは、ユーザーがログイン時に利用できる環境をシステムから閉じこめてしまう環境です。なぜこのような環境が必要かというと、ProFTPなどではchroot設定が簡単にでき、サーバにログインしたユーザーがホームディレクトリより上を参照できないようにできますが((つまりユーザーホームディレクトリがルートディレクトリになります))、OpenSSHでのsftpではそれができません。~
 従って、必要最小限のディレクトリ構成を準備して、その中にユーザーを閉じこめてしまいます。
 #br
 やり方を私が調べた限りではOpenSSH-chrootまたはPAMでの方法があるようです。前者の方法ではSSHを再コンパイルする必要があり、パッケージ管理の観点からもめんどくさいのでPAMで実現する方法を選びました(実際PAMで実現する方が柔軟性があると思います)。
 
 ** 最小限のchroot環境を作成 [#u64207fe]
 |>|基本設定|h
 |chrootでのルートディレクトリ|/pam-jails/|
 |対象ユーザー                |dobu       |
 |グループ                    |dobu       |
 この設定に従うと、dobuのホームディレクトリは/pam-jails/home/dobu/になります。
 
 *** ディレクトリの作成 [#ff8c2834]
 まずは/pam-jails/以下に必要なディレクトリを作成します。パーミッションは本来のディレクトリに合わせます。ここでの目的はSFTPが使える環境の構築です。
  /pam-jails/
      bin/
      dev/
      etc/
          profile.d/
          security/
      home/
          dobu/
      lib/
          i686/
      usr/
          bin/
          lib/
              i686/
          libexec/
 
 *** 最小限のプログラムのコピー [#m87d34e4]
 ディレクトリが作成されたところで最小限のプログラム本体をコピーします。~
 |bin/    |bash, cat, egrep, grep, hostname, ls, more, pwd, sh|
 |usr/bin/|[, groups, id, test, which                         |
 ここでいう最小限のプログラムとはSSHでログインできて変なエラーが出ない、ということを指します。その他作業に必要な物があればコピーしましょう。
 
 *** ダイナミックリンクライブラリのコピー [#t6443594]
 プログラムだけでは動かないので必要なダイナミックリンクライブラリをコピーします。
 - ネットワークサービスまわりのライブラリ(Vine-4.0)
 |    |シンボリックリンク|実ファイル            |h
 |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の設定 [#qa1ef038]
 *** /etc/sshd_config [#tedfd493]
 sshdの挙動を設定します。
  UsePAM yes
  ChallengeResponseAuthentication no
 を設定します。
 
 ** PAMの設定 [#zd35abc9]
 ''本来のシステムの''PAM設定ファイルを修正します。
 
 *** /etc/pam.d/sshd [#ie851e22]
 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 [#df23b689]
 pam_chroot.soモジュールの設定ファイル。正規表現でユーザー名を指定するようです。
  # /etc/security/chroot.conf
  # format:
  # username_regex        chroot_dir
  ^dobu$                 /pam-jails
 
 *** chroot環境に必要なファイルのコピー [#vc855011]
 PAMモジュールで必要なものをコピーします。
  # cp -a /etc/security/pam_env.conf /etc/security/console.perms /pam-jails/etc/security