サーバ構築ガイド - ChrootSSHで特定ユーザをChroot

chrootは特定のディレクトリをルートとみなしてファイルシステムを閉じ込めます。FreeBSDにはjailというchrootより強力で プロセスも閉じ込めることができるものがありますが、IPアドレスを割り振ったり、環境を構築するのが面倒です。 ここではFTPに必要な最低限のコマンドが用意されたユーザディレクトリに閉じ込める設定を紹介します。

追記 (2005/04/08)

PortsにChrootのオプションが組み込まれたようです。makeの際にWITH_OPENSSH_CHROOTのオプションをつければいいようです。 なので以下は参考程度に読んでください。(NADMINさん経由)

インストール

http://nadmin.org/howto/chrooted-ssh.htmlからFreeBSD用のChrootssh化パッチをダウンロードします。

 

# cd /usr/local

# fetch http://nadmin.org/howto/distfiles/osshChroot-3.8p1-FreeBSD.diff

# cd /usr/ports/security/openssh-portable

# make patch

# cd work

# patch -p0 < /usr/local/osshChroot-3.8p1-FreeBSD.diff

# cd ..

# make

# make install

# mv /usr/sbin/sshd /usr/sbin/sshd.bak

# ln -s /usr/local/sbin/sshd /usr/sbin/sshd

 

※私の環境ではコンパイル時にエラーになったのでsession.cを以下のように修正しました。(3.8-p1)

↓行番号

1593| (追加) #ifdef CHROOT

1594| (追加) do_setusercontext(pw, user_dir, new_root, 1);

1595| (追加) #else

1596|      do_setusercontext(pw);

1567| (追加) #endif /* CHROOT */

(2004-04-06)版のパッチで修正されました。

設定

chrootしたいユーザのホームディレクトリを

/home/ユーザ名/./と設定します。

 

ここでchroot後にFTPが操作できる最低限必要なファイルを用意します。

私は以下のファイル構成にしました。/以下 の同名のファイルをコピーしてください。

 

# vi .profile

 PATH=/bin:/usr/sbin:/usr/bin:/usr/local/libexec:/usr/libexec; export PATH

 

# cd /home/ユーザ名

# mkdir bin etc usr var usr/bin usr/lib usr/libexec usr/local usr/local/libexec usr/sbin var/run

 

/home/ユーザ名:

.login

.login_conf

.profile

.shrc

 

bin/

 

etc/

 

usr/

 

var/

 

/home/ユーザ名/bin:

chmod

cp

echo

ln

ls

mkdir

mv

pwd

rm

rmdir

sh

 

/home/ユーザ名/etc:

group

pwd.db

termcap

 

/home/ユーザ名/usr:

bin/

lib/

libexec/

local/

sbin/

 

/home/ユーザ名/usr/bin:

chgrp

groups

id

scp

 

/home/ユーザ名/usr/lib:

libc.so.4

libcrypto.so.3

libssh.so.2

libutil.so.3

libz.so.2

 

/home/ユーザ名/usr/libexec:

ld-elf.so.1

 

/home/ユーザ名/usr/local:

libexec/

 

/home/ユーザ名/usr/local/libexec:

sftp-server

 

/home/ユーザ名/usr/sbin:

chown

 

/home/ユーザ名/var:

run/

 

/home/ユーザ名/var/run:

ld-elf.so.hints

 

# chown root:wheel .*

# chmod 755 bin etc usr var usr/bin usr/lib usr/libexec usr/local usr/local/libexec usr/sbin var/run