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目录
相关推荐
辞旧 lekkk6 小时前
【Qt】信号和槽
linux·开发语言·数据库·qt·学习·mysql·萌新
腾讯蓝鲸智云6 小时前
【运维自动化-节点管理】节点管理的插件策略如何使用
运维·自动化·云计算·sass·paas
疯狂成瘾者8 小时前
服务器的单体和集群
运维·服务器
liuhuizuikeai9 小时前
可视化门禁---Linux/Qt+SqLite篇
linux·运维·qt
初願致夕霞9 小时前
基于系统调用的Linux网络编程——UDP与TCP
linux·网络·c++·tcp/ip·udp
charlie11451419112 小时前
嵌入式Linux驱动开发——新 API 字符设备驱动完整教程 - 从设备结构体到应用测试
linux·运维·驱动开发
飞Link12 小时前
2000 亿砸向算力:字节跳动 AI 基建跨越,后端与运维的“万亿 Token”生死战
运维·人工智能
消失的旧时光-194312 小时前
C语言对象模型系列(四)《Linux 内核里的 container_of 到底是什么黑魔法?》—— 一篇讲透 Linux 内核的“对象模型”核心技巧
linux·c语言·算法
SWAGGY..13 小时前
Linux系统编程:(二)基础指令详解
linux·运维·服务器
kdxiaojie13 小时前
U-Boot分析【学习笔记】(3)
linux·笔记·学习