在 CentOS 上创建 SFTP 账号(仅用于 SFTP,不能 SSH 登录)通常的做法是:
新建系统用户 + 限制到指定目录 + 使用 internal-sftp。
下面以 CentOS 7 / 8 为例,一步步说明。
# 创建用户
useradd sftpuser
# 设置密码
passwd sftpuser
如果你不想让该用户有系统登录权限(推荐):
usermod -s /sbin/nologin sftpuser
⚠️ 重要规则:
SFTP 根目录的上级目录必须是 root 所有,且权限不能大于 755
# 创建目录
mkdir -p /data/sftp/sftpuser
# 设置所有者(必须是 root)
chown root:root /data/sftp
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
# 用户可写目录
mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftpuser /data/sftp/sftpuser/upload
编辑 SSH 配置文件:
vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
✅ 如果是一组用户,可用:
Match Group sftp
systemctl restart sshd
sftp sftpuser@服务器IP
登录后:
//data/sftp/sftpuserupload 目录写文件fatal: bad ownership or modes for chroot directory
✅ 原因:Chroot 目录不是 root 所有或权限不对
✅ 解决:
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
groupadd sftp
usermod -G sftp sftpuser
chown root:sftp /data/sftp/sftpuser
usermod -s /sbin/nologin sftpuser
如果你需要:
可以告诉我你的具体场景,我可以给你更合适的方案。