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/7/27 23:27:30 阅读更多 →
数据漂移与概念漂移检测|KS检验/PSI/ADWIN方法+突变/渐变/递增类型

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

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

2026/7/27 23:27:30 阅读更多 →
DSP/BIOS下精简UDP/IP协议栈与以太网驱动实战设计

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

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

2026/7/27 23:27:30 阅读更多 →

最新新闻

浏览器提效插件Ajax Interceptor Tools

浏览器提效插件Ajax Interceptor Tools

小伙伴们大家好,我是小溪,见字如面。最近在做线上问题排查时,找到一个不错的调试工具,记录一个基本使用方式。 当前使用版本 v0.0.11 优势 支持请求与响应双向修改 支持JavaScript编程与动态Mock 支持资源重定向及跨越配置 …

2026/7/27 23:36:34 阅读更多 →
跨越天际:从智能汽车到 eVTOL 的适航与系统级开发55——附录 B 典型 eVTOL 适航全生命周期文档核查清单(SOI-1 到 SOI-4 审计指南)

跨越天际:从智能汽车到 eVTOL 的适航与系统级开发55——附录 B 典型 eVTOL 适航全生命周期文档核查清单(SOI-1 到 SOI-4 审计指南)

本文摘要:航空适航标准DO-178C/DO-254要求机载软件/硬件研发需通过四次关键阶段审查(SOI-1至SOI-4)。与敏捷开发不同,SOI审计强调过程完整性和全生命周期可追溯性,要求每行代码都有需求来源,并通过文档核查…

2026/7/27 23:36:34 阅读更多 →
嵌入式安全MCU的CPU自测试控制器(STC)寄存器配置与实战指南

嵌入式安全MCU的CPU自测试控制器(STC)寄存器配置与实战指南

1. 项目概述 在嵌入式系统,尤其是汽车电子和工业控制这类对功能安全要求极高的领域,硬件自检(Built-In Self-Test, BIST)早已不是锦上添花,而是系统设计的“生命线”。想象一下,一辆高速行驶的汽车&#xf…

2026/7/27 23:36:34 阅读更多 →
Agent Skill 也要做回归测试 阿里开源 skill-up,开始补上智能体工程的质量短板

Agent Skill 也要做回归测试 阿里开源 skill-up,开始补上智能体工程的质量短板

过去一年,Agent Skill 迅速升温。一份 SKILL.md,配上脚本、工具声明和领域知识,就能让 Agent 获得一项相对完整的能力:代码审查、依赖升级、数据分析、发布计划、故障排查、测试执行……但当越来越多 Skill 开始进入真实项目&…

2026/7/27 23:36:34 阅读更多 →
【Kimi效率翻倍的7个隐藏技巧】:资深AI工程师私藏,90%用户从未用过的进阶操作

【Kimi效率翻倍的7个隐藏技巧】:资深AI工程师私藏,90%用户从未用过的进阶操作

更多请点击: https://codechina.net 第一章:Kimi效率翻倍的7个隐藏技巧 Kimi 作为一款强大的AI助手,其潜力远不止于基础问答。掌握以下七个深度集成技巧,可显著提升信息处理、代码生成与知识管理效率。 启用多轮上下文锚定模式 …

2026/7/27 23:36:34 阅读更多 →
igh开源ros2项目

igh开源ros2项目

ros2_control_ethercat_driver‌ 基于ROS2 Control生态开发的工业级驱动项目,完全适配ROS2的controller_manager框架,无需手动编写实时线程,就能直接加载位置控制器、力矩控制器,快速实现多轴联动。 它自带DC同步自动校准功能&…

2026/7/27 23:35:33 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻