在 CentOS 上创建一个仅用于 SFTP 的用户(通常不能 SSH 登录,只能传文件),最常用、最安全的做法是使用 OpenSSH 的 internal-sftp + Chroot。下面一步一步来。
# 创建用户(不允许登录 shell)
useradd -m -s /sbin/nologin sftpuser
# 设置密码
passwd sftpuser
⚠️ Chroot 目录必须由 root 拥有,且其他用户不可写
mkdir -p /data/sftp
chown root:root /data/sftp
chmod 755 /data/sftp
mkdir -p /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
chmod 755 /data/sftp/upload
编辑 SSH 配置文件:
vi /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
如果是多个用户,可用:
Match Group sftpusers
并先创建组:
groupadd sftpusers
usermod -aG sftpusers sftpuser
systemctl restart sshd
sftp sftpuser@服务器IP
登录后:
/(实际是 /data/sftp)upload 目录并上传文件原因:
✅ 解决:
chown root:root /data/sftp
chmod 755 /data/sftp
原因:
upload 等子目录# 创建 .ssh
mkdir -p /home/sftpuser/.ssh
chmod 700 /home/sftpuser/.ssh
# 放公钥
vi /home/sftpuser/.ssh/authorized_keys
chmod 600 /home/sftpuser/.ssh/authorized_keys
chown -R sftpuser:sftpuser /home/sftpuser/.ssh
并在 sshd_config 中:
PasswordAuthentication no
如果你需要:
可以继续问我。