chrootを用いてSSHユーザのディレクトリを制限する

共有サーバなどでSSHするユーザが操作できるディレクトリを特定のもののみに制限して、/rootや/etcなどは見られないようにする。

設定手順

お客様に提供するユーザを作成

$ useradd hoge
$ passwd hoge

chrootでSSHを使用できるようにするためには、各コマンドの実行ファイル・関連ファイルをホームディレクトリ直下に配置する必要があるので、各種配置する。

$ cd /home/hoge
$ cp -p -r /bin /home/hoge/bin
$ cp -p -r /lib /home/hoge/lib
$ cp -p -r /lib64 /home/hoge/lib64
$ mkdir usr
$ cp -p -r /usr/bin /home/hoge/usr/bin 
$ cp -p -r /usr/lib /home/hoge/usr/lib
$ cp -p -r /usr/lib64 /home/hoge/usr/lib64

パーミッションを変更する。 chroot用のディレクトリ/home/hogeはroot:root, 755に変更する。 /home/hoge以下のディレクトリ、ファイルはhoge:hogeに変更する。 注) chrootを使用すると、/home/hoge直下にはユーザはファイルを作成できません。/home/hoge直下にディレクトリを作成すると、そのディレクトリ配下ではファイルを作成可能です。

$ chown root:root /home/hoge
$ chmod 755 /home/hoge
$ cd /home/hoge
$ chown hoge:hoge *

/etc/ssh/sshd_configを編集する。

# SFTP出来るようSubsystemを以下に編集
Subsystem sftp  internal-sftp

# 末尾に以下を追記
Match User hoge
    ChrootDirectory /home/hoge
    X11Forwarding no
    AllowTcpForwarding no
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys

その後、鍵ペアを作成し、公開鍵を/home/hoge/.ssh/authorized_keysにコピーする。 以下でSSHが可能になる。

$ ssh -i <秘密鍵> hoge@<IP>