▼要件
- sftp/scpでの操作のみを許可
- ホームディレクトリより上の階層に移動不可
- ホームディレクトリはchroot後の/とする
▼環境
- CentOS 5 64bit
- rpmforgeリポジトリ利用
- ホームディレクトリは作成済み
▼このメモを書いた理由
- chroot作成スクリプトがrpmに含まれてない
- 見つけたが不備があり、かつ見通しが自分には悪かった
▼インストール
yum --enablerepo=rpmforge install rssh
▼ユーザ追加
※ホームディレクトリのパス末尾は/で終わることに注意。
useradd -m -d /var/www/vhosts/hoge.jp/ -s /usr/bin/rssh fuga
▼/etc/rssh.conf(追加)
allowscp
allowsftp
user = fuga:011:00011:/var/www/vhosts/hoge.jp
▼chroot jailを作るためのshellスクリプト
※CentOS5用ディレクトリパスで作ってある
#---- ここから ----
#!/bin/bash
_USER=$1
_CMDS=”/usr/libexec/openssh/sftp-server /usr/bin/scp /usr/bin/rssh /usr/libexec/rssh_chroot_helper”
##### functions #####
_HOMEDIR=$(eval echo ~$_USER)
cd “$_HOMEDIR”
Mkdir_Copy () {
local _PATH=$1
[ -f “$_PATH” ] || { echo $0: $_PATH not found, exit.; exit 1; }
[ ! -d “$(dirname .$_PATH)” ] && mkdir -p “$(dirname .$_PATH)”
[ ! -f “.$_PATH” ] && cp -aL “$_PATH” “.$_PATH”
return 0
}
##### Copy bin & lib #####
for _BIN in $_CMDS; do
Mkdir_Copy “$_BIN”
ldd “$_BIN” \
| while read _LIB _A _PATH _HEX; do
if [ $(echo “$_LIB” | cut -c1) = / ]; then
_PATH=”$_LIB”
fi
[ “$_LIB” = ‘linux-vdso.so.1’ ] && continue
Mkdir_Copy “$_PATH”
done
done
cp -a /lib64/libnss_* ./lib64
#cp -a /lib64/libm* ./lib64
#cp -a /lib64/ld-* ./lib64
##### etc #####
mkdir ./etc
grep “^$_USER:” /etc/passwd > ./etc/passwd
cp -a /etc/nsswitch.conf /etc/ld.so.conf /etc/ld.so.cache /etc/localtime ./etc
##### dev #####
mkdir ./dev
mknod -m 666 ./dev/null c 1 3
#/etc/init.d/syslog stop
#echo “SYSLOGD_OPTIONS=\”-m 0 -a $_HOMEDIR/dev/log\”” >> /etc/sysconfig/syslog
#/etc/init.d/syslog start
exit
#—- ここまで —-