CentOS7搭建SFTP

CentOS7搭建SFTP


一、安装OpenSSH服务

shell 复制代码
# 检查是否已安装 SSH
rpm -qa | grep openssh-server
# 查看sshd服务状态
systemctl status sshd

# 若未安装则执行安装
yum install openssh-server -y

# 启动并设置开机自启
systemctl start sshd
systemctl enable sshd

# 查看ssh版本
ssh -V

二、开放端口

SSH/SFTP 默认端口为 22

shell 复制代码
# SSH/SFTP 默认端口为 22,如需修改端口,更改如下端口
vim /etc/ssh/sshd_config
Port 22

# 重启
systemctl restart sshd

# 开放22端口
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --reload

# 查看防火墙已放行端口
firewall-cmd --list-ports

三、创建 SFTP 用户及目录

shell 复制代码
# 创建用户组
groupadd sftpusers

# 创建用户
# -g 加入用户组
# -s /sbin/nologin :禁止ssh shell登录,仅允许SFTP登录
# -M 不自动创建系统默认家目录
useradd -g sftpusers -s /sbin/nologin -M sftpuser
# 设置用户密码
passwd sftpuser

# 创建SFTP根目录(chroot锁定目录)
# 路径:/sftp/用户名
mkdir -p /sftp/sftpuser
# 根目录必须属主root,权限755,SFTP chroot严格校验
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser

# 创建用户可读写上传目录(用户只对upload目录有权限)
mkdir -p /sftp/sftpuser/upload
chown sftpuser:sftpusers /sftp/sftpuser/upload

四、配置权限限制

shell 复制代码
# 编辑配置文件
vim /etc/ssh/sshd_config
# 注释原有配置
# Subsystem sftp /usr/libexec/openssh/sftp-server
# 使用 SSH 内置的 SFTP 服务
Subsystem sftp internal-sftp
# 匹配 用户组 sftpusers 下的所有用户(推荐使用)
Match Group sftpusers
    # 目录锁定:用户只能访问 /sftp/自身用户名 目录,无法跳出访问服务器其他任何文件
    ChrootDirectory /sftp/%u
    # 强制仅运行SFTP文件传输,禁止所有shell命令执行
    ForceCommand internal-sftp
    # 全量安全加固配置(关闭所有不必要通道,防止端口转发、代理、穿透、提权)
    AllowTcpForwarding no
    AllowAgentForwarding no
    X11Forwarding no
    PermitTunnel no
    PermitTTY no # 禁止分配伪终端,彻底无法登录shell,仅纯文件传输,最安全

# 匹配特定用户(如需匹配多个用户,可使用 Match User user1,user2)(不推荐)
#Match User sftpuser
    #ChrootDirectory /sftp/%u
    #ForceCommand internal-sftp

    #AllowTcpForwarding no
    #AllowAgentForwarding no
    #X11Forwarding no
    #PermitTunnel no
    #PermitTTY no 

# 校验配置文件语法(无任何输出 = 配置完全正确)
# 若有报错,会直接提示错误行号、错误原因,根据提示修改即可
sshd -t

# 重启
systemctl restart sshd

五、测试

shell 复制代码
# 另一台服务器连接
sftp sftpuser@服务器IP

连接成功后验证:
pwd     # 显示 / ,代表已被chroot锁定
ls      # 仅能看到 upload 文件夹
put 本地文件  # 可上传文件至upload目录
相关推荐
姓刘的哦5 分钟前
STM32的启动流分析
linux·运维·arm开发
2601_949499948 分钟前
芯瑞科技 DT‑1414完全兼容HFBR‑1414TZ光模块国产化优选方案深度解析(工程师视角)
运维·网络·人工智能·科技·光模块
一路向北finish12 分钟前
《CentOS7 OpenStack Mitaka 全栈部署实战:双节点搭建全流程与典型故障排坑指南》
运维·mysql·serverless·云计算·openstack
XUEYUAN521214 分钟前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
Fcy64816 分钟前
Linux下 Socket编程 —— UDP网络编程
linux·网络·udp
guo_wen_qiang31 分钟前
mac中iTerm有没有类似xshell远程连接服务器的用户名密码方式,不用每次都要输入用户密码
运维·服务器·macos
xzl0440 分钟前
Ubuntu24.04 生产环境 Docker(全国内源)
运维·docker·容器
lajidecrd44 分钟前
Ubuntu 24.04 LTS安装
linux·运维·ubuntu
ai小陈44 分钟前
PyTorch多GPU分布式训练实战:从单卡脚本迁移到DDP
服务器·人工智能·pytorch·分布式·深度学习·ai·gpu算力
沫璃染墨1 小时前
《从零入门Linux系统篇(二十九):文件篇·二——深入文件描述符:从文件描述符表到重定向,再到Shell实现》
linux·运维·服务器·c++·驱动开发·系统架构