温馨提示×

centos sftp如何设根目录

小樊
38
2026-10-20 12:39:35
栏目: 智能运维

在 CentOS 上配置 SFTP 的根目录(chroot 根目录),通常是指把某个用户 限制在其家目录或指定目录中,不能访问系统其他路径。最常见做法是使用 OpenSSH 自带的 internal-sftp + ChrootDirectory。

下面给你一个标准、可用的配置步骤。


一、创建 SFTP 用户和目录

1. 创建用户(不允许 SSH 登录)

useradd -m -s /sbin/nologin sftpuser
passwd sftpuser

2. 创建 SFTP 根目录

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

⚠️ ChrootDirectory 必须属主是 root,且其他用户不可写

3. 创建用户可写目录

mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
chmod 755 /data/sftp/upload

二、修改 SSH 配置(关键)

编辑:

vi /etc/ssh/sshd_config

1. 注释掉原来的 Subsystem

#Subsystem sftp /usr/libexec/openssh/sftp-server

2. 添加 internal-sftp

Subsystem sftp internal-sftp

3. 添加 SFTP 用户限制配置

Match User sftpuser
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

如果你想限制一组用户,可以用:

Match Group sftp

三、重启 SSH 服务

systemctl restart sshd

四、测试 SFTP

sftp sftpuser@服务器IP

登录后:

sftp> pwd
Remote working directory: /
sftp> ls
upload

此时用户 只能看到 /data/sftp 作为根目录


五、常见错误说明

❌ 登录报错:

fatal: bad ownership or modes for chroot directory

原因:

  • ChrootDirectory 不是 root 拥有
  • ChrootDirectory 权限不是 755 或更严格

✅ 正确示例:

chown root:root /data/sftp
chmod 755 /data/sftp

六、多个用户共用一个根目录(可选)

Match Group sftp
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp
groupadd sftp
usermod -aG sftp sftpuser

如果你愿意,可以告诉我:

  • CentOS 版本(7 / 8 / Stream)
  • 是否用 密钥登录
  • 是否需要 多个用户不同目录

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

0 踩