Linux命令-sftp-server(SFTP 服务器端子系统)
Linux命令-sftp-serverSFTP 服务器端子系统 简介 语法⚙️ 选项 配置1. sshd_config 中的基本配置2. internal-sftp vs sftp-server 对比 示例示例 1锁定 SFTP 用户到指定目录Chroot SFTP示例 2使用 sftp-server 独立日志记录示例 3只读 SFTP 服务配置示例 4创建 sftp-server 的包装脚本以实现自定义日志示例 5允许指定 SFTP 协议扩展⚠️ 注意 相关命令 总结快速参考sftp-server是 OpenSSH 的SFTP 服务器端子系统由sshd守护进程在收到 SFTP 客户端连接时自动启动通常不需要用户手动运行。作为管理员理解它对于配置安全的 SFTP 服务至关重要。日常使用中你几乎不会直接执行sftp-server命令。它的配置完全通过/etc/ssh/sshd_config中的Subsystem指令完成。本文主要面向系统管理员帮助你理解 SFTP 服务端的配置和安全加固。 简介sftp-server是一个无交互的后台二进制程序它的生命周期由 SSH 守护进程sshd完全管理客户端发起sftp连接sshd接收连接完成 SSH 握手和认证sshd根据配置 fork 一个sftp-server进程sftp-server通过 SSH 通道的 stdin/stdout 与客户端通信客户端断开时sftp-server进程随之终止二进制文件位置因发行版而异发行版sftp-server 路径Debian/Ubuntu/usr/lib/openssh/sftp-serverRHEL/CentOS 7/usr/libexec/openssh/sftp-serverRHEL/CentOS 8 / Fedora/usr/libexec/openssh/sftp-serverArch Linux/usr/lib/ssh/sftp-serveropenSUSE/usr/lib/ssh/sftp-server# 查找本机 sftp-server 的真实路径$ls-la/usr/lib*/openssh/sftp-server /usr/lib*/ssh/sftp-server2/dev/null -rwxr-xr-x1root root98304Jun110:00 /usr/lib/openssh/sftp-server 语法sftp-server[选项]由于 sftp-server 由 sshd 自动调用你不需要手动执行它。但了解其选项有助于在sshd_config中进行高级配置。⚙️ 选项选项说明-d 目录指定用户操作的根目录起始路径-e将日志输出到 stderr 而非 syslog调试用-f 配置指定日志记录设施如AUTH、LOCAL0-h显示帮助信息-l 级别指定日志级别QUIET/FATAL/ERROR/INFO/VERBOSE/DEBUG-R以只读模式运行禁止所有写操作-u umask设置新建文件的默认 umask如-u 002-p 选项指定允许的 SFTP 协议扩展逗号分隔如posix-rename,statvfs-P 选项禁止特定 SFTP 协议扩展 配置1. sshd_config 中的基本配置sftp-server 通过Subsystem指令注册到 sshd# 查看当前 sftp 子系统配置$sudogrep-isubsystem.*sftp/etc/ssh/sshd_config Subsystemsftp/usr/lib/openssh/sftp-server# 编辑配置文件$sudovim/etc/ssh/sshd_config# 方式一使用独立 sftp-server 二进制 # 传统方式每个 SFTP 会话 fork 一个 sftp-server 进程Subsystemsftp/usr/lib/openssh/sftp-server# 方式二使用 internal-sftp推荐# internal-sftp 是 sshd 内置的 SFTP 实现性能更好Subsystemsftpinternal-sftp# 修改后重启 sshd$sudosystemctl restart sshd2. internal-sftp vs sftp-server 对比这是 Linux SFTP 服务配置中最重要的选择之一特性internal-sftpsftp-server进程模型sshd 内建无独立进程每个连接 fork 独立进程性能更快无 fork 开销略慢Chroot 支持✅ 原生ChrootDirectory✅ 需配合-d参数ForceCommand必须使用ForceCommand internal-sftp不需要特殊 ForceCommand独立日志❌ 日志在 sshd 日志中✅ 支持-l-f独立日志资源占用低每个会话额外占用内存推荐场景绝大多数场景需要独立日志或调试时# internal-sftp 配置示例推荐$sudotee-a/etc/ssh/sshd_config.d/sftp.confEOF # 使用内置 SFTP性能最佳 Subsystem sftp internal-sftp EOF# sftp-server 配置示例需要独立日志时$sudotee-a/etc/ssh/sshd_config.d/sftp_debug.confEOF Subsystem sftp /usr/lib/openssh/sftp-server -l VERBOSE -f LOCAL0 EOF 示例示例 1锁定 SFTP 用户到指定目录Chroot SFTP这是 SFTP 服务器最常见的安全配置需求——将用户限制在特定目录内禁止浏览服务器其他文件系统。# Step 1: 创建 SFTP 专用用户组和用户$sudogroupaddsftponly $sudouseradd-m-gsftponly-s/usr/sbin/nologin ftpuser1 $sudopasswdftpuser1 New password: ******** Retype new password: ********# Step 2: 创建 Chroot 目录结构# ChrootDirectory 要求目录属主为 root且不可被用户写入$sudomkdir-p/srv/sftp/ftpuser1/uploads $sudochownroot:root /srv/sftp/ftpuser1 $sudochmod755/srv/sftp/ftpuser1 $sudochownftpuser1:sftponly /srv/sftp/ftpuser1/uploads $sudochmod755/srv/sftp/ftpuser1/uploads# Step 3: 配置 sshd$sudotee-a/etc/ssh/sshd_config.d/sftp_chroot.confEOF # 匹配 sftponly 组用户 Match Group sftponly # 使用 internal-sftp必须搭配 ForceCommand ForceCommand internal-sftp # Chroot 到对应目录%u 表示用户名 ChrootDirectory /srv/sftp/%u # 禁止 TCP 端口转发 AllowTcpForwarding no # 禁止 X11 转发 X11Forwarding no # 禁止 TTYshell访问 PermitTTY no EOF# Step 4: 重启 SSH 服务$sudosystemctl restart sshd# Step 5: 验证效果$sftpftpuser1localhost Connected to localhost. sftppwdRemote working directory: / sftpls-ladrwxr-xr-x3004096Jun1410:00.drwxr-xr-x3004096Jun1410:00..drwxr-xr-x2100110014096Jun1410:00 uploads sftpcduploads sftpput test.txt Uploading test.txt to /uploads/test.txt test.txt100%120.0KB/s 00:00 sftpcd/ sftpls..Couldntstatremote file: Permission denied# ls .. 被拒绝用户被成功限制在 Chroot 目录内# Step 6: 尝试 SSH shell 登录——应该被拒绝$sshftpuser1localhost Thisserviceallowssftpconnections only. Connection to localhost closed.# 预期效果ftpuser1 只能通过 SFTP 访问 /srv/sftp/ftpuser1/ 目录# 无法获得 Shell 访问无法浏览服务器其他路径示例 2使用 sftp-server 独立日志记录# 当需要独立的 SFTP 操作审计日志时配置 sftp-server 自定义日志# Step 1: 配置 rsyslog 接收 sftp-server 日志$sudotee/etc/rsyslog.d/30-sftp.confEOF local0.* /var/log/sftp.log ~ EOF$sudosystemctl restart rsyslog# Step 2: 配置 sshd 使用 sftp-server 并指定日志参数$sudotee-a/etc/ssh/sshd_config.d/sftp_audit.confEOF # 使用 sftp-server 替代 internal-sftp 以获取独立日志 Subsystem sftp /usr/lib/openssh/sftp-server -l INFO -f LOCAL0 EOF$sudosystemctl restart sshd# Step 3: 测试并查看日志$sftpuserlocalhostls -la; bye$sudotail-f/var/log/sftp.log# 预期输出示例# Jun 14 11:00:15 server sftp-server[12345]: session opened for local user user# Jun 14 11:00:16 server sftp-server[12345]: opendir /home/user# Jun 14 11:00:16 server sftp-server[12345]: closedir /home/user# Jun 14 11:00:17 server sftp-server[12345]: session closed for local user user# 日志级别选项# QUIET - 仅记录致命错误# FATAL - 记录致命错误和严重错误# ERROR - 记录所有错误# INFO - 记录操作信息推荐审计用# VERBOSE - 记录详细操作信息# DEBUG - 调试级别输出极其详细示例 3只读 SFTP 服务配置# 场景文件分发服务器用户只能下载不能修改/删除/上传# 方式一sftp-server 的 -R 选项只读模式$sudotee-a/etc/ssh/sshd_config.d/sftp_readonly.confEOF Match Group readonly-sftp ForceCommand internal-sftp ChrootDirectory /srv/sftp-readonly EOF# 方式二通过文件系统权限实现只读$sudomkdir-p/srv/sftp-readonly $sudochownroot:root /srv/sftp-readonly $sudochmod755/srv/sftp-readonly $sudocp/var/www/data/* /srv/sftp-readonly/# 验证只读效果$sftpreadonly_userlocalhost Connected to localhost. sftplsfile1.txt file2.dat archive.tar.gz sftpget file1.txt Fetching /file1.txt to file1.txt file1.txt100%10241.0KB/s 00:00 sftprmfile1.txt Removing /file1.txt Couldnt delete file: Permission denied sftpput new_file.txt Uploading new_file.txt to /new_file.txt remote open(/new_file.txt): Permission denied# 预期输出下载(get)正常删除(rm)和上传(put)都被拒绝示例 4创建 sftp-server 的包装脚本以实现自定义日志#!/bin/bash# /usr/local/bin/sftp-server-wrapper.sh# sftp-server 包装脚本添加自定义日志前缀和操作审计LOG_FILE/var/log/sftp_custom.log# 记录 SFTP 用户和连接信息echo[$(date%Y-%m-%d %H:%M:%S)] SFTP session: user$USER, IP$SSH_CLIENT$LOG_FILE# 调用真实的 sftp-server 并保留其退出码exec/usr/lib/openssh/sftp-server-lINFO-fLOCAL0$# 配置 sshd 使用包装脚本# $ sudo tee -a /etc/ssh/sshd_config.d/sftp_wrapper.conf EOF# Subsystem sftp /usr/local/bin/sftp-server-wrapper.sh# EOF# $ sudo chmod x /usr/local/bin/sftp-server-wrapper.sh# $ sudo systemctl restart sshd示例 5允许指定 SFTP 协议扩展# OpenSSH SFTP 支持多种协议扩展可以通过 -p/-P 控制# 首先查看当前 SSH 版本支持的扩展$ssh-VOpenSSH_9.6p1, OpenSSL3.1.424Oct2023# 查看 sfp-server 可用的日志设施$sudo/usr/lib/openssh/sftp-server-h21# 在 sshd_config 中限制扩展安全加固$sudotee-a/etc/ssh/sshd_config.d/sftp_extensions.confEOF # 仅允许必要的协议扩展禁止可能带来风险的扩展 Subsystem sftp /usr/lib/openssh/sftp-server -p posix-rename,statvfs,fstatvfs,hardlinkopenssh.com EOF# 常用协议扩展说明# posix-renameopenssh.com - 原子重命名# statvfsopenssh.com - 文件系统统计信息df 命令需要# fstatvfsopenssh.com - 打开文件的文件系统统计同上# hardlinkopenssh.com - 创建硬链接# fsyncopenssh.com - 强制同步到磁盘# copy-data - 服务器端复制无需下载再上传⚠️ 注意Chroot SFTP 常见问题“fatal: bad ownership or modes for chroot directory”—ChrootDirectory指向的目录必须属主为root且权限不允许组/其他用户写入755或750而非777。“Couldn’t stat remote file: No such file or directory”— 用户被 chroot 后/就是ChrootDirectory内部找不到/home/user是正常的它在/home/user已变成/。internal-sftp 与 ForceCommand 的关系— 使用internal-sftp时必须配合ForceCommand internal-sftp否则Match块不会生效。SFTP 日志位置—internal-sftp的日志在/var/log/auth.logDebian/Ubuntu或/var/log/secureRHEL/CentOS中与 sshd 共用。需要独立日志时才使用外部的sftp-server。 相关命令命令说明sshdSSH 守护进程sftp-server 的宿主进程sftpSFTP 客户端scp基于 SSH 的文件复制rsync高级文件同步工具ssh-keygenSSH 密钥管理chroot更改根目录的系统调用sftp chroot 的基础 总结sftp-server虽然是一个后台默默运行的程序但它的配置直接影响 SFTP 服务的安全性、性能和审计能力推荐使用 internal-sftp性能更好配置更简洁满足 95% 的需求场景Chroot SFTP 是安全最佳实践将 SFTP 用户锁定在特定目录防止横向移动需要独立审计日志时才用外部 sftp-serverinternal-sftp的日志与 sshd 混合文件系统权限是最后防线即使 SFTP 配置允许写操作文件系统的chmod权限可以覆盖一句话理解 sftp-server 不是为了手动运行它而是为了在sshd_config中正确配置 Subsystem构建安全可靠的 SFTP 服务。

相关新闻

GICI-LIB:把卫星、惯导、相机塞进同一张因子图里的开源高精度定位库

GICI-LIB:把卫星、惯导、相机塞进同一张因子图里的开源高精度定位库

0. 简介 笔者第一次看到 GICI-LIB 这个名字的反应是:又一个 GNSS/IMU 紧耦合的轮子?翻开仓库才意识到这次不太一样——它不是"再写一遍 RTK 估计器",而是把 SPP、RTD、RTK、PPP、GNSS/IMU 紧耦合、GNSS/Visual/Inertial 紧耦合等十…

2026/10/23 1:31:25 阅读更多 →
数据漂移与概念漂移检测|KS检验/PSI/ADWIN方法+突变/渐变/递增类型

数据漂移与概念漂移检测|KS检验/PSI/ADWIN方法+突变/渐变/递增类型

摘要:数据漂移与概念漂移检测:KS检验、PSI群体稳定性指数、ADWIN自适应窗口三种方法对比。数据漂移是输入分布变化,概念漂移是输入输出关系变化。本文详解突变型、渐变型、递增型三种漂移的检测方法和Python实现代码。 一、漂移问题的本质 机器学习的核心假设(以及为什么它…

2026/10/21 18:26:25 阅读更多 →
DSP/BIOS下精简UDP/IP协议栈与以太网驱动实战设计

DSP/BIOS下精简UDP/IP协议栈与以太网驱动实战设计

1. 项目概述 在嵌入式设备开发领域,尤其是工业控制、音视频处理或传感器网络节点中,德州仪器(TI)的DSP平台因其强大的实时信号处理能力而被广泛应用。然而,将这些“信息孤岛”接入网络,实现远程数据交互或集…

2026/10/22 9:45:46 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/22 1:47:45 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/22 21:33:42 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 22:56:44 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 22:56:12 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 19:06:46 阅读更多 →