1. 安装OpenSSH服务器
SFTP依赖SSH协议实现,需先确保系统安装OpenSSH服务器。使用以下命令安装:
sudo apt update && sudo apt install openssh-server
安装完成后,SSH服务会自动启动,可通过systemctl status ssh验证状态。
2. 创建专用SFTP用户组及用户
为便于权限管理,建议创建专门的SFTP用户组(如sftpusers),并将用户添加至该组:
sudo groupadd sftpusers # 创建用户组
sudo useradd -m -G sftpusers -s /sbin/nologin sftpuser # 创建用户(禁止SSH登录)
sudo passwd sftpuser # 设置用户密码
-s /sbin/nologin:禁止用户通过SSH shell登录,仅允许SFTP访问;-G sftpusers:将用户添加至sftpusers组。3. 配置SSH服务限制SFTP访问
编辑SSH主配置文件/etc/ssh/sshd_config,关键配置如下:
# 备份原配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 修改或添加以下内容
Subsystem sftp internal-sftp # 使用内置SFTP子系统(更安全)
# 限制sftpusers组的访问
Match Group sftpusers
ChrootDirectory %h # 限制用户只能访问其家目录(chroot环境)
ForceCommand internal-sftp # 强制使用SFTP,禁用shell命令
AllowTcpForwarding no # 禁止TCP转发
X11Forwarding no # 禁止X11转发
sftp-server(更轻量且无需额外安装);sftpusers组的用户生效;/home/sftpuser),需确保目录权限正确。4. 设置用户家目录及权限
Chroot环境要求用户家目录的所有者为root,且权限为755(防止用户修改目录结构):
sudo chown root:root /home/sftpuser # 所有者为root
sudo chmod 755 /home/sftpuser # 权限设置为755
若需让用户上传文件,需在家目录下创建子目录(如uploads),并设置用户对该目录的所有权:
sudo mkdir /home/sftpuser/uploads # 创建上传目录
sudo chown sftpuser:sftpusers /home/sftpuser/uploads # 所有权给用户
sudo chmod 755 /home/sftpuser/uploads # 权限设置为755(或775,根据需求)
ChrootDirectory指定的目录(如/home/sftpuser)必须由root拥有,且不能有写权限(除子目录外)。5. 重启SSH服务使配置生效
修改配置文件后,需重启SSH服务:
sudo systemctl restart ssh
可通过systemctl status ssh验证服务是否重启成功。
6. 安全最佳实践
sudo apt update && sudo apt upgrade定期更新系统和软件包,修补安全漏洞;sshd_config中添加AllowUsers sftpuser@your_ip,仅允许指定IP访问;/var/log/auth.log查看SSH登录日志,及时发现异常登录行为。