HoRain云--CentOS7搭建安全SFTP服务器全攻略
本文介绍了在CentOS7上搭建安全SFTP服务器的详细步骤,主要包括:1)安装配置OpenSSH服务;2)创建专用SFTP用户组和禁止shell登录的用户;3)建立严格的目录结构并设置权限;4)配置SSH实现chroot监牢环境;5)服务重启与连接测试。文章提供了完整流程图和详细操作说明,重点强调了目录权限设置等安全措施,并附带了常见问题排查方法,帮助用户快速搭建一个限制用户访问范围的SFTP服

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

在CentOS 7上搭建一个安全的SFTP服务器,核心是配置一个“监牢”环境,将用户限制在指定目录内。下面这张流程图帮你快速了解整个操作的全貌。
flowchart TD
A[开始搭建SFTP服务器] --> B[安装与启动OpenSSH]
B --> C[创建专用用户和组]
C --> D[建立严格的目录结构]
D --> E[配置SSH以启用chroot]
E --> F[重启服务并测试]
F --> G[SFTP服务就绪]
C --> C1[创建用户组sftpusers]
C --> C2[创建用户并禁止shell登录]
D --> D1[设置根目录属主为root]
D --> D2[创建用户可写的子目录]
E --> E1[启用internal-sftp]
E --> E2[匹配用户组并设置chroot]
F --> F1[重启sshd服务]
F --> F2[使用客户端连接测试]
以下是每个步骤的详细操作说明。
🔧 安装与检查OpenSSH
SFTP是OpenSSH的一个子系统,因此首先需要确保OpenSSH服务器已安装并运行。
-
安装OpenSSH服务器(通常系统已预装):
sudo yum install -y openssh-server -
启动并设置开机自启:
sudo systemctl start sshd sudo systemctl enable sshd -
检查防火墙:如果防火墙(
firewalld)是开启状态,需要放行SSH默认的22端口。sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload如果使用的是云服务器(如阿里云、腾讯云),还需在云平台的安全组规则中放行TCP 22端口。
👤 创建专用的SFTP用户和组
为了管理方便和安全,我们为SFTP用户创建一个独立的组和用户。
-
创建用户组(例如
sftpusers):sudo groupadd sftpusers -
创建SFTP用户(例如用户名为
mysftpuser),并禁止其通过SSH获得Shell终端,这是关键的安全措施:sudo useradd -g sftpusers -s /sbin/nologin mysftpuser -
为用户设置密码:
sudo passwd mysftpuser
📁 建立安全的目录结构
这是实现“监牢”环境的物理基础,目录权限设置至关重要。
-
创建SFTP根目录:选择一个目录作为所有SFTP用户的根目录,例如
/sftp。sudo mkdir /sftp -
设置根目录权限:该目录的拥有者必须是
root,且其他用户不能有写权限,否则SSH会出于安全考虑拒绝连接。sudo chown root:root /sftp sudo chmod 755 /sftp # 权限必须是755或更严格(如750) -
创建用户专属目录:在根目录下为刚创建的用户建立一个目录,此目录将是该用户登录后看到的唯一位置。
sudo mkdir /sftp/mysftpuser -
设置用户子目录权限:用户专属目录的权限同样需要严格设置。
sudo chown root:root /sftp/mysftpuser # 属主仍为root sudo chmod 755 /sftp/mysftpuser -
创建用户可操作的子目录:用户需要一个有写权限的目录来上传文件,例如
upload。sudo mkdir /sftp/mysftpuser/upload sudo chown mysftpuser:sftpusers /sftp/mysftpuser/upload # 此目录属主为用户 sudo chmod 755 /sftp/mysftpuser/upload # 可根据需要设置为766或770
⚙️ 配置SSH服务器(关键步骤)
通过修改SSH配置文件,将用户锁定在指定的根目录内。
-
编辑配置文件:
sudo vi /etc/ssh/sshd_config -
在文件末尾添加以下配置:这些配置指示SSH为
sftpusers组的用户启用内部SFTP服务,并将其限制在指定的根目录。# 注释掉或确保以下行存在,使用内置SFTP实现 Subsystem sftp internal-sftp # 匹配sftpusers组,应用以下规则 Match Group sftpusers # 设置chroot根目录,%u代表用户名,这里用户将锁定在/sftp/mysftpuser ChrootDirectory /sftp/%u # 强制使用SFTP,禁止Shell访问 ForceCommand internal-sftp # 禁用不相关的功能以增强安全 AllowTcpForwarding no X11Forwarding no -
在保存修改前,务必检查配置语法,防止配置错误导致SSH服务无法启动:
sudo sshd -t如果该命令没有输出任何错误信息,说明配置文件语法正确。
🚀 重启服务与测试连接
-
重启SSH服务以应用所有更改:
sudo systemctl restart sshd -
使用SFTP客户端连接测试:
-
使用如FileZilla、WinSCP等客户端。
-
服务器地址填你的CentOS 7的IP,端口22。
-
用户名填
mysftpuser,密码是你设置的密码。 -
连接成功后,你应该只能看到
upload目录,并且无法切换到其上级目录。
-
⚠️ 常见问题排查
-
连接被立即关闭:最常见的原因是Chroot目录(如
/sftp/mysftpuser)的权限设置错误。请确保其属主是root,并且权限不超过755。 -
无法上传文件/创建目录:用户只能在属于自己且有写权限的子目录(如
upload)中进行写操作。请检查该子目录的属主和权限。 -
SELinux阻止:如果启用了SELinux,可能需要调整策略:
sudo setsebool -P ssh_chroot_rw_homedirs on
按照以上步骤操作,你就能在CentOS 7上成功搭建一个安全的SFTP服务器了。如果你在配置过程中遇到具体问题,例如错误信息,可以告诉我,我们再一起分析。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐



所有评论(0)