温馨提示×

centos如何更改sftp根目录

小樊
46
2026-10-17 14:54:34
栏目: 智能运维

在 CentOS 上“更改 SFTP 根目录”通常指把某个用户(或用户组)的 SFTP 登录目录限制(chroot)到指定目录,或者只是修改其默认家目录。下面分两种常见场景说明。


一、使用 OpenSSH 内置 SFTP 实现 chroot(推荐)

适用于:希望用户只能通过 SFTP 登录,且被限制在某个目录下(如 /sftp/data)。

1. 创建用户和目录

useradd -m sftpuser
passwd sftpuser

mkdir -p /sftp/data
chown root:root /sftp
chmod 755 /sftp
chown sftpuser:sftpuser /sftp/data

⚠️ 注意:chroot 目录(如 /sftp)必须由 root 拥有,且其他用户不可写。

2. 修改 SSH 配置

编辑:

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

3. 重启 SSH

systemctl restart sshd

4. 测试

sftp sftpuser@服务器IP

登录后根目录即为 /sftp,实际可写目录是 /sftp/data。


二、仅修改 SFTP 用户默认目录(不限制)

如果用户只是用 SFTP,但不需要 chroot:

usermod -d /new/path sftpuser

注意:

  • 新目录需存在
  • 权限要正确
  • 不影响 SSH 登录位置

三、常见问题

1. 登录报错:

fatal: bad ownership or modes for chroot directory

原因:ChrootDirectory 不是 root 拥有或权限不对
解决:

chown root:root /sftp
chmod 755 /sftp

2. 无法上传文件

chroot 根目录不能写,应在子目录写:

/sftp/data

3. SELinux 影响

如启用 SELinux:

semanage fcontext -a -t public_content_rw_t "/sftp/data(/.*)?"
restorecon -Rv /sftp/data

如果你能提供:

  • CentOS 版本
  • 是否使用 chroot
  • 单用户还是多用户

我可以给你更精确的配置示例。

0 踩