SFTP服务安全加固设置:一步步提升文件传输安全性

为什么你的SFTP需要加固?

很多新手搭建完SFTP就直接用默认配置——端口22、允许密码登录、用户可访问整个文件系统。
这种状态下,服务器极易被暴力破解或权限滥用。SFTP服务安全加固设置就是在现有SSH服务基础上,通过调整配置文件来缩小攻击面,同时保证正常文件传输不受影响。
下面我们按步骤一步步操作。

---

加固前需要准备什么?

  • 一台Linux服务器(本文以Ubuntu 20.04为例,CentOS命令类似)
  • 已开通SSH的root或sudo用户权限
  • 建议先在本地备份 /etc/ssh/sshd_configsudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  • 准备一个用于测试的非root普通用户(例如 sftpuser
如果你用宝塔面板,部分操作可以在“SSH管理器”或“系统安全”中完成,但手动修改配置文件更可控。

---

核心加固步骤:从端口到权限

1. 修改SSH默认端口(避开扫描器)

编辑 /etc/ssh/sshd_config,找到 #Port 22 改为 Port 2222(或你喜欢的1024-65535之间的端口)。
修改后重启服务:

sudo systemctl restart sshd
注意:修改后别忘了在防火墙放行新端口,否则你会把自己锁在外面。例如 sudo ufw allow 2222/tcp

2. 禁用密码登录,强制使用密钥

生成密钥对(本地执行):

ssh-keygen -t ed25519 -f ~/.ssh/sftp_key

将公钥上传到服务器:

ssh-copy-id -i ~/.ssh/sftp_key.pub -p 22 sftpuser@你的服务器IP

确认能密钥登录后,在 sshd_config 中修改:

PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no

3. 限制SFTP用户只能访问指定目录(Chroot)

这一步防止用户通过SFTP看到其他目录。
创建专用目录并设置权限:

sudo mkdir -p /home/sftpuser/upload
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
sudo chown sftpuser:sftpuser /home/sftpuser/upload

然后在 sshd_config 末尾添加:

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

重启服务:sudo systemctl restart sshd

4. 禁用SFTP用户的Shell登录

只允许SFTP,不允许SSH终端。
修改 /etc/passwd 中该用户的shell:

sudo usermod -s /usr/sbin/nologin sftpuser

或者使用 -s /bin/false,效果类似。

---

常见问题与避坑指南

问题1:修改端口后无法连接

  • 检查防火墙是否放行了新端口
  • 查看SSH日志:sudo journalctl -u sshd -n 20/var/log/auth.log
  • 如果用的是云服务器,安全组也要放行对应端口

问题2:Chroot配置后用户无法登录

  • 最常见原因:Chroot目录的所有者必须是root,且权限不能为777。
  • 检查目录权限:ls -ld /home/sftpuser 应为 drwxr-xr-x root root
  • 用户主目录(即Chroot内部)的上级目录必须归root所有

问题3:用户仍然能通过SSH登录

  • 确认 ForceCommand internal-sftp 写在了 Match User 块内,且 Match 块位于 sshd_config 末尾。
  • 检查 AllowUsersDenyUsers 是否有冲突

避坑提醒

  • 不要直接修改 Subsystem sftp /usr/lib/openssh/sftp-server 这一行,否则影响全局。
  • 每次修改 sshd_config 后先测试:sudo sshd -t,如果无输出说明语法正确。
  • 建议保留一个root登录的备用SSH会话,防止配置错误断开连接。

---

验证你的配置是否生效

  1. 验证端口修改:在本地执行 ssh -p 2222 sftpuser@你的服务器IP,如果不输入密码就登录成功(密钥已配置),说明端口和密钥认证正常。
  2. 验证禁止密码登录:尝试使用密码连接(可临时删掉密钥或用其他用户),应提示“Permission denied (publickey)”。
  3. 验证Chroot限制:连接后执行 ls -l /,看到的内容应只包含Chroot目录内的文件(如 upload 文件夹),无法进入 /etc/var 等真实系统目录。
  4. 验证Shell禁用:通过SSH尝试执行 ls 等命令,应该被拒绝并自动断开。

如果你使用的是FileZilla等客户端,连接时注意端口、协议选择SFTP(SSH File Transfer Protocol),并指定密钥文件。

---

完成以上步骤后,你的SFTP服务安全等级已经比默认配置提升了一大截。
后续根据实际业务需求,还可以进一步限制IP来源、配置Fail2Ban等。
如果遇到任何异常,优先回看日志和本笔记的避坑部分。

分享到:
上一篇
FTP服务器搭建权限配置:零基础搞定FTP服务器搭建与权限配
下一篇
远程桌面XRDP配置Linux系统
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意