CentOS7でのchrootの設定手順をまとめました。
sftpの設定はらくらく出来たのですが、
scpの設定にドはまりしてしまい大いに時間をかけてしまいました。
同じようにchrootでscpの設定を行う人がスムーズに作業ができればいいなと思います。
事前準備
この例ではscpでの接続のみ許可します。
chrootのユーザーには公開鍵認証で接続することとします。
- 事前にchroot接続用のユーザーを作成しておく
- 事前に公開鍵をchrootのユーザーのホームディレクトリに配置しておく
- chrootユーザーの環境定義スクリプトを配置する
chrootユーザー環境定義スクリプト
以下のスクリプトを配置しておきましょう。
/usr/local/bin/scp_only.sh
---
#!/bin/sh
# scp_only.sh - chrootユーザーの環境定義スクリプト
export PATH=$PATH:/bin
LOG_FILE=/tmp/scp_only.log
echo $SSH_ORIGINAL_COMMAND > ${LOG_FILE}
echo $PWD >> ${LOG_FILE}
echo $SSH_ORIGINAL_COMMAND | grep '^scp ' > /dev/null 2>&1 || exit 77
umask 002
cd /home/${USER}
exec $SSH_ORIGINAL_COMMAND
chroot用のディレクトリを掘る
/chroot
ディレクトリを作り、その下にユーザー名のディレクトリを作ります。
さらに、その下に/bin
やchroot後のユーザーのホームディレクトリを作ります。
ここでは先にchroot後のユーザーのホームディレクトリを作ります。
# mkdir -p /chroot/USER_NAME/home/USER_NAME
# chown USER_NAME:USER_GROUP /chroot/USER_NAME/home/USER_NAME
chrootに必要なコマンド、ライブラリのコピー
chrootで使用するコマンドや、コマンドが必要とするライブラリをコピーしてやる必要があります。
mkdirでディレクトリを掘って、lddで必要なライブラリを探して、コピーして・・
と作業してもよいですが、面倒くさいのでスクリプトで一気に作ります。
/usr/local/sbin/create_chroot_env.sh
----
#!/bin/sh
# create_chroot_env.sh - chrooted scp 用の chroot 環境作成スクリプト
#
COMMANDS=\'/bin/bash /usr/local/sbin/scp_only.sh /bin/sh /bin/grep /bin/scp\'
LIBS=\'/lib64/libnss_files.so.2\'
if [ ${#} -ne 1 ]; then
cat < ${JAIL}/etc/passwd
chmod 644 ${JAIL}/etc/passwd
fi
if [ ! -e ${JAIL}/etc/nsswitch.conf ]; then
fi
mkdir_jail /tmp 1777
スクリプトを配置したら、実行権限を付与しておくとよいです。
引数にユーザー名を指定して、create_chroot_env.shを実行します。
# /usr/local/sbin/create_chroot_env.sh USER_NAME
スクリプトを実行した後は以下のようなディレクトリが出来ます。
# ls -Rl /chroot/USER_NAME
/chroot/USER_NAME:
合計 4
drwxr-xr-x. 2 root root 47 3月 6 13:12 bin
drwxr-xr-x. 2 root root 17 3月 6 13:12 dev
drwxr-xr-x. 2 root root 39 3月 6 13:12 etc
drwxr-xr-x. 3 root root 24 3月 6 13:12 home
drwxr-xr-x. 2 root root 4096 3月 6 13:12 lib64
drwxrwxrwt. 2 root root 25 3月 6 16:21 tmp
drwxr-xr-x. 3 root root 18 3月 6 13:12 usr
/chroot/USER_NAME/bin:
合計 2104
-rwxr-xr-x. 1 root root 960392 9月 26 10:53 bash
-rwxr-xr-x. 1 root root 154648 6月 10 2014 grep
-rwxr-xr-x. 1 root root 70208 6月 10 2014 scp
-rwxr-xr-x. 1 root root 960392 9月 26 10:53 sh
/chroot/USER_NAME/dev:
合計 0
crw-rw-rw-. 1 root root 1, 3 3月 6 13:12 null
/chroot/USER_NAME/etc:
合計 8
-rw-r--r--. 1 root root 14 3月 6 13:12 nsswitch.conf
-rw-r--r--. 1 root root 52 3月 6 13:12 passwd
/chroot/USER_NAME/home:
合計 0
drwxr-xr-x. 4 USER_NAME tomcat 30 3月 6 16:21 USER_NAME
/chroot/USER_NAME/home/USER_NAME:
合計 0
/chroot/USER_NAME/lib64:
合計 8464
-rwxr-xr-x. 1 root root 160240 1月 28 05:13 ld-linux-x86-64.so.2
-rwxr-xr-x. 1 root root 2107600 1月 28 05:13 libc.so.6
-rwxr-xr-x. 1 root root 40816 1月 28 05:13 libcrypt.so.1
-rwxr-xr-x. 1 root root 2004592 1月 21 05:58 libcrypto.so.10
-rwxr-xr-x. 1 root root 19512 1月 28 05:13 libdl.so.2
-rwxr-xr-x. 1 root root 502040 12月 3 22:57 libfreebl3.so
-rwxr-xr-x. 1 root root 62800 6月 10 2014 liblber-2.4.so.2
-rwxr-xr-x. 1 root root 340144 6月 10 2014 libldap-2.4.so.2
-rwxr-xr-x. 1 root root 113320 1月 28 05:13 libnsl.so.1
-rwxr-xr-x. 1 root root 251824 7月 23 2014 libnspr4.so
-rwxr-xr-x. 1 root root 1215920 12月 3 23:23 libnss3.so
-rwxr-xr-x. 1 root root 58288 1月 28 05:13 libnss_files.so.2
-rwxr-xr-x. 1 root root 182008 12月 3 21:53 libnssutil3.so
-rwxr-xr-x. 1 root root 398264 6月 10 2014 libpcre.so.1
-rwxr-xr-x. 1 root root 20016 7月 23 2014 libplc4.so
-rwxr-xr-x. 1 root root 15776 7月 23 2014 libplds4.so
-rwxr-xr-x. 1 root root 141616 1月 28 05:13 libpthread.so.0
-rwxr-xr-x. 1 root root 110808 1月 28 05:13 libresolv.so.2
-rwxr-xr-x. 1 root root 44048 1月 28 05:13 librt.so.1
-rwxr-xr-x. 1 root root 121296 6月 10 2014 libsasl2.so.3
-rwxr-xr-x. 1 root root 164016 12月 3 23:23 libsmime3.so
-rwxr-xr-x. 1 root root 259968 12月 3 23:23 libssl3.so
-rwxr-xr-x. 1 root root 174520 6月 10 2014 libtinfo.so.5
-rwxr-xr-x. 1 root root 14608 1月 28 05:13 libutil.so.1
-rwxr-xr-x. 1 root root 90632 6月 10 2014 libz.so.1
/chroot/USER_NAME/tmp:
合計 4
-rw-r--r--. 1 USER_NAME tomcat 19 3月 6 16:21 scp_only.log
/chroot/USER_NAME/usr:
合計 0
drwxr-xr-x. 3 root root 17 3月 6 13:12 local
/chroot/USER_NAME/usr/local:
合計 0
drwxr-xr-x. 2 root root 24 3月 6 13:12 sbin
/chroot/USER_NAME/usr/local/sbin:
合計 4
-rwxr-xr-x. 1 root root 253 3月 6 13:12 scp_only.sh
これで環境の構築は完了です。
sshd_configの設定
/etc/ssh/sshd_configのおしりに以下を記述し、sshをreloadもしくはrestartします。
Match User USER_NAME
ChrootDirectory /chroot/USER_NAME
X11Forwarding no
AllowTcpForwarding no
ForceCommand /usr/local/sbin/scp_only.sh
これでchrootでscpを行う用意が出来ました。