1. 安装OpenSSH服务器
SFTP基于SSH协议,需先确保系统安装OpenSSH服务器。对于Debian/Ubuntu系统,使用sudo apt update && sudo apt install openssh-server;对于CentOS/RHEL系统,使用sudo yum install openssh-server(或dnf install openssh-server)。安装完成后启动服务并设置开机自启:sudo systemctl start sshd、sudo systemctl enable sshd。
2. 创建专用SFTP用户组与用户
为隔离权限,建议创建专门的用户组(如sftpusers)和用户。创建组:sudo groupadd sftpusers;创建用户(禁止SSH登录):sudo useradd -g sftpusers -s /sbin/nologin -d /home/sftpuser sftpuser(-s /sbin/nologin限制无法通过SSH登录);设置密码:sudo passwd sftpuser。
3. 配置SSH服务限制SFTP访问
编辑SSH配置文件/etc/ssh/sshd_config,关键修改如下:
Subsystem sftp行,修改为Subsystem sftp internal-sftp(使用OpenSSH内置的SFTP服务,无需额外安装);Match Group sftpusers块,内容为:Match Group sftpusers
ChrootDirectory %h # 将用户限制在其家目录(%h代表用户家目录)
ForceCommand internal-sftp # 强制使用SFTP子系统,禁止SSH shell访问
AllowTcpForwarding no # 禁止TCP转发(增强安全性)
X11Forwarding no # 禁止X11转发
保存退出后,重启SSH服务:sudo systemctl restart sshd。4. 设置Chroot目录及子目录权限
Chroot目录(用户家目录)必须属主为root,权限为755(防止用户修改目录结构);用户上传目录需属主为用户自身,权限为755(允许上传文件)。操作步骤:
sudo mkdir -p /home/sftpuser、sudo chown root:root /home/sftpuser、sudo chmod 755 /home/sftpuser;sudo mkdir -p /home/sftpuser/upload;sudo chown sftpuser:sftpusers /home/sftpuser/upload、sudo chmod 755 /home/sftpuser/upload。5. (可选)配置SELinux(若系统启用)
若系统启用SELinux(如CentOS默认开启),需调整策略允许SFTP访问用户目录:
sudo setsebool -P sftp_home_dir on;sudo chcon -Rv --reference=/home/sftpuser /home/sftpuser/upload(使目录继承家目录的安全上下文)。6. 测试SFTP连接
使用SFTP客户端(命令行或图形界面)连接服务器,验证配置是否成功。命令行测试:sftp sftpuser@your_server_ip,输入密码后若进入SFTP交互模式(显示sftp>提示符),则配置正确;图形界面可使用FileZilla,输入服务器IP、用户名、密码,选择“SFTP - SSH File Transfer Protocol”协议连接。