在 CentOS 上“更改 SFTP 根目录”通常指把某个用户(或用户组)的 SFTP 登录目录限制(chroot)到指定目录,或者只是修改其默认家目录。下面分两种常见场景说明。
适用于:希望用户只能通过 SFTP 登录,且被限制在某个目录下(如 /sftp/data)。
useradd -m sftpuser
passwd sftpuser
mkdir -p /sftp/data
chown root:root /sftp
chmod 755 /sftp
chown sftpuser:sftpuser /sftp/data
⚠️ 注意:chroot 目录(如
/sftp)必须由 root 拥有,且其他用户不可写。
编辑:
vi /etc/ssh/sshd_config
注释或确认以下行:
# Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
在文件末尾添加:
Match User sftpuser
ChrootDirectory /sftp
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
如果是用户组方式:
Match Group sftp
ChrootDirectory /sftp
ForceCommand internal-sftp
并创建组:
groupadd sftp
usermod -G sftp sftpuser
systemctl restart sshd
sftp sftpuser@服务器IP
登录后根目录即为 /sftp,实际可写目录是 /sftp/data。
如果用户只是用 SFTP,但不需要 chroot:
usermod -d /new/path sftpuser
注意:
fatal: bad ownership or modes for chroot directory
原因:ChrootDirectory 不是 root 拥有或权限不对
解决:
chown root:root /sftp
chmod 755 /sftp
chroot 根目录不能写,应在子目录写:
/sftp/data
如启用 SELinux:
semanage fcontext -a -t public_content_rw_t "/sftp/data(/.*)?"
restorecon -Rv /sftp/data
如果你能提供:
我可以给你更精确的配置示例。