概要
FTPでchroot設定はよくありますが、SFTPでchroot設定するには少々特殊な対応が必要になります。
前提
⚠️chroot先のディレクトリの所有者はrootにする必要があります。
chroot例
操作対象のディレクトリ:https://example.com/test/
手順
1.chroot用のディレクトリを作成する
ここではわかりやすい様にchrootを起点に作成していますが、なんでも好きな設定にしてOKです
mkdir -p /chroot/{任意}/{chroot先のディレクトリ名}
#例
mkdir -p /chroot/user/test
2.権限の調整
ls -l /chroot/{任意}
ls -l /chroot/{任意}/{chroot先のディレクトリ名}
/chroot/{任意} はroot:rootで755である必要がある
また/chroot/{任意}/{chroot先のディレクトリ名}はchroot先のディレクトリの権限、パーミッションに合わせる。
(var/www/vhost/example.com/public_html/test/の権限、パーミッションに合わせる必要がある)
chmod 755 /chroot/{任意}
chown root:root /chroot/{任意}
chmod 775 /chroot/{任意}/{chroot先のディレクトリ名}
chown {任意}:{任意} /chroot/{任意}/{chroot先のディレクトリ名}
3.マウントの設定
/chroot/{任意}/{chroot先のディレクトリ名}
を
/var/www/vhosts/{ドメイン名}/{chroot先のディレクトリ名}
にマウントさせる
mount --bind /var/www/vhosts/{ドメイン名}/{chroot先のディレクトリ名} /chroot/{任意}/{chroot先のディレクトリ名}
#例
mount --bind /var/www/vhosts/example.com/public_html/test /chroot/user/test
4.fstabの設定
サーバーの再起動後もマウント状態を維持したい場合は、その設定を fstabに記述しておく必要があります
fstabに書かれていないマウントは、一時的なものとして扱われ、OS再起動等で自動的に解除されます
cp /etc/fstab /etc/fstab.YYYYMMDD
vim /etc/fstab
---
/var/www/vhosts/{ドメイン名}/{chroot先のディレクトリ名} /chroot/{任意}/{chroot先のディレクトリ名} none bind 0 0
---
diff -u /etc/fstab.YYYYMMDD /etc/fstab
5.sshd_configの設定
/etc/ssh/sshd_configに下記を追記してsshdの再起動を実施する
Match User {任意}
ChrootDirectory /chroot/{任意}
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
1.Match User {任意}
• 特定のユーザー({任意}の部分に指定)に 以下の設定を適用する という意味です。
• ここから下の設定は、このユーザーに対してだけ有効になります。
2.ChrootDirectory /chroot/{任意}
• 接続したユーザーを /chroot/{任意} ディレクトリ以下に強制的に制限(chroot) します。
• そのユーザーは、SFTP接続時にこのディレクトリより上の階層(システム全体)を見ることができなくなります。
3.ForceCommand internal-sftp
• シェル(bash等)ではなく、「internal-sftp」コマンド(SFTP専用)だけを動かします。
• これにより、ユーザーは SFTPによるファイル転送のみ可能 になり、SSHでサーバーのシェルにログインはできません。
4.AllowTcpForwarding no
• ポート転送機能(ポートフォワード等)を禁止 します。
5.X11Forwarding no
• X11フォワーディング(リモートでGUIアプリ使用)を禁止 します。
#例
[root@web01 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.20250707
[root@web01 ~]# vim /etc/ssh/sshd_config
[root@web01 ~]# diff -u /etc/ssh/sshd_config.20250707 /etc/ssh/sshd_config
--- /etc/ssh/sshd_config.20250707 2025-07-07 16:57:58.191752383 +0900
+++ /etc/ssh/sshd_config 2025-07-07 16:58:49.112692720 +0900
@@ -144,3 +144,9 @@
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
+
+Match User user
+ ChrootDirectory /chroot/user/
+ ForceCommand internal-sftp
+ AllowTcpForwarding no
+ X11Forwarding no
[root@web01 ~]# systemctl restart sshd
以上です!
SFTPでのchrootはマウントさせることが肝です!
環境によって必要な設定も違うと思うので必要な部分だけ参考にしてもらえればと思います!