当前位置:首页 > 技术 > 正文内容

CentOS配置SFTP服务详解

访客 技术 2026年7月8日 1

一、准备SFTP数据目录与测试账户

# 创建基础目录结构
[root@localhost ~]# mkdir -pv /data/sftp/

# 设置目录所有者必须为root(chroot前提条件)
[root@localhost ~]# chown root:root -R /data/sftp/

# 权限至少755,确保普通用户可进入
[root@localhost ~]# chmod 755 -R /data/sftp/

# 创建专用用户组
[root@localhost ~]# groupadd sftpgroup

# 创建用户并限制shell登录
[root@localhost ~]# useradd -d /data/sftp/testuser -m -g sftpgroup -s /sbin/nologin testuser

# 验证用户创建
[root@localhost ~]# id testuser

# 设置密码(测试用简单密码,生产环境建议通过Web工具生成或使用mkpasswd)
[root@localhost ~]# echo "123456" | passwd --stdin testuser

二、调整SSHD配置文件(基于用户组管理)

配置前需定位相应段落

修改后配置示例:

Subsystem sftp internal-sftp
Match Group sftpgroup
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

关键参数说明:

  • internal-sftp:使用内置SFTP子系统,无需额外软件
  • Match Group sftpgroup:仅约束指定组的成员,多组用逗号分隔
  • ChrootDirectory /data/sftp/%u:锁定用户根目录为 /data/sftp/用户名
  • ForceCommand internal-sftp:强制仅允许SFTP操作
  • AllowTcpForwarding no:禁止TCP转发(默认yes,若需shell访问可开启)
  • X11Forwarding no:禁用X11转发,降低风险

重启服务可能遇到的错误:

[root@localhost ~]# systemctl restart sshd
Job for sshd.service failed because the control process exited with error code.

[root@localhost ~]# tail /var/log/messages
Jul  4 14:13:53 localhost sshd: /etc/ssh/sshd_config line 145: Directive 'UseDNS' is not allowed within a Match block

此问题源于UseDNS被错误放置在Match块内,务必将其置于全局配置区域。

三、客户端连接测试

1. 修正用户目录权限

[root@localhost ~]# cd /data/sftp/
[root@localhost sftp]# ls -la
drwx------ 2 testuser sftpgroup 62 Jul  4 05:12 testuser

[root@localhost sftp]# chown root:root testuser
[root@localhost sftp]# chmod 755 testuser/

[root@localhost sftp]# cd testuser/
[root@localhost testuser]# mkdir upload
[root@localhost testuser]# chown testuser:sftpgroup upload/

2. 连接测试

[root@localhost ~]# sftp testuser@172.16.150.135
testuser@172.16.150.135's password: 
Connected to 172.16.150.135.
sftp> ls
upload  
sftp> cd upload/
sftp> mkdir testdir
sftp> rmdir testdir
sftp> help  # 显示支持的命令

常见错误处理:

packet_write_wait: Connection to 172.16.150.135 port 22: Broken pipe
Couldn't read packet: Connection reset by peer

此类错误几乎均由目录权限不正确导致,需遵循以下核心原则:

  • 从ChrootDirectory指定目录向上至根目录,所有目录所有者必须是root
  • 从ChrootDirectory指定目录向上至根目录,所有目录不可包含组写入权限

四、基于单个用户的配置(原理与组模式相同)

Match User zara_sftp
    ChrootDirectory /data/sftp/zara_sftp
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
标签: CentOSSFTP

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。