川崎と申します。 困った時の ML 頼みですみませんが、よろしくお願いします。長くて済みませ ん。下の方に [知りたいこと] をまとめております。
[背景] あるノード A に ssh でログインして、ここからさらに ssh で別のノードへ ログインするようにしています。いわゆる踏み台サーバで、ここまでは問題な く動作しています。(当たり前ですが) 今、ノード A を踏み台として使うだけのユーザについて、OpenSSH の ChrootDirectory の機能を使って、ノード A のディレクトリツリーへのアク セスを制限したいものと思って、設定を試しています。 環境は以下の通りです。 FreeBSD 8.2-RELEASE-p1 i386 OpenSSH_5.2p1 FreeBSD-openssh-portable-5.2.p1_3,1, OpenSSL 1.0.0d 8 Feb 2011 (ports の security/openssh-portable から最近入れたもの) [やったこと] ノード A 上のユーザ user1 について、ChrootDirectory の対象にするため、 /usr/local/etc/ssh/sshd_config に以下を追加しました。 Match User user1 ChrootDirectory /home/user1 AllowTcpForwarding no X11Forwarding no さらに、user1 のホームディレクトリ (/home/user1) に、必要と思われるファ イル群を準備しました。動作してから不要ファイルを消すつもりで、多めにコ ピーしています。また、/home/user1 と /usr/home/user1 が混在しているよ うに見えますが、シンボリックリンク (/home@ -> usr/home) で実体は同じで す。 # cd /home/user1 # chown root:wheel . # cp -pr /bin /sbin /lib /libexec /etc /tmp . # mkdir usr # cp -pr /usr/bin /usr/sbin /usr/lib /usr/libexec usr # mkdir dev # mount -t devfs devfs /usr/home/user1/ # mkdir -p home/user1 # chown user1:group1 home/user1 この user1 の /usr/home/user1/etc/passwd の行は次の通りです。 user1:*:10000:10000:User &:/home/user1:/bin/tcsh ついでに /usr/home/user1/etc/group には group1 があります。 group1:*:10000: ChrootDirectory の外側では、user1 は LDAP 上にエントリがあって /etc/passwd などにはエントリがありませんが `id user1` や `finger user1` で情報を表示できています。 内側でも /var/run/utmp を /usr/home/var/run/utmp にコピーすれば id や finger が正しい答えを返します。 これで、ノード A に user1 としてログインして、(/usr/home/kawasaki)/bin の下のコマンドなどを実行することができます。(全部は試していませんが) [困っていること] ところが、この状態でノード A 上の user1 として、/usr/bin/ssh (もともと FreeBSD に付いてきた方のもの。為念) を使ってさらに別のノード B へログ インしようとすると、下記のエラーが出てうまく行きません。 nodeA-user1-tcsh> ssh -vvv another.node.example.jp (中略) debug1: read_passphrase: can't open /dev/tty: Permission denied Host key verification failed. この時に、(/usr/home/user1)/dev/tty は、たしかに user1 からは読み書き できません。 > ls -l /dev/tty crw--w---- 1 root tty 0, 93 May 19 15:58 /dev/tty ChrootDirectory の設定を入れなければ、/dev/tty のオーナーが user1 になっ ているので、その状態であればノード A からの ssh が成功します。 [試してみたこと] devfs を使って /usr/home/user1/dev/tty のオーナーを user1 にしたり、 モードを 0666 にしてみたりしましたが、 ChrootDirectory の外側から見ると指定通りのオーナーやモードになるが 内側(user1)から見ると root:tty 0640 のままになっている。 というちょっと不思議なことになっています。 [知りたいこと] ChrootDirectory の内側の user1 から見て、/dev/tty の読み書きができるよ うにするためには、どうすれば良いでしょうか? あるいは、こういう「踏み台」を作る別の方法があれば教えてください。 よろしくお願いします。 -- moto kawasaki <m...@kawasaki3.org>