0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SFTPユーザーにchrootを設定する方法

Posted at

概要

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はマウントさせることが肝です!
環境によって必要な設定も違うと思うので必要な部分だけ参考にしてもらえればと思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?