SFTP用户的创建与使用
本文最后更新于:September 17, 2026 pm
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统。主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版。
Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,甚至当作网络防火墙。Linux具有开放源码、没有版权、技术社区用户多等特点,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈,经过适当的配置就可实现路由器的功能。
目录
- SSH文件传输协议secret file transfer protocol, Secure FTP或SFTP,是一种数据流连线档案存取、传输和管理功能的网络传输协议。
- 该文章环境为ubuntu系统。因需要为客户提供可以访问公司内部的数据文件,所有需要给用户提供SFTP用户,并且保证用户无法正常ssh登录,以及只拥有读取文件的权限。
创建用户组和用户
1 | |
创建用户根目录
- 每一个 ChrootDirectory 依然要遵守 OpenSSH 硬性规则:目录属主 root:root,权限 755。
- 另外需要注意的是,指定的
chroot根目录的路径,每一阶目录都必须是root,比如/datadisk/sftp_user_files/sftp_user,那么/datadisk、/datadisk/sftp_user_files、/datadisk/sftp_user_files/sftp_user这三个目录都必须是归属于root的,不然在进行用户登录时,服务端是会直接断掉的!!!但是在这三个目录下,可以拥有非root归属的其他目录,比如在/datadisk/sftp_user_files下可以有另外一些a、b、c等其他正常目录,而且归属可以不属于root。也正是因为这一点,在创建SFTP用户对应的目录时,可能会遇到一些问题,这个需要自行选择。 - 创建这个目录的目的是:客户登录SFTP后,服务器把
/datadisk/sftp_user_files映射成客户的/目录,客户看到的目录就是/,没有任何系统目录,无法跳出。
1 | |
修改sshd_config配置文件
1 | |
1 | |
PermitWrite no强制只读,就算权限误配置,也无法写入
校验并重启sshd
1 | |
多匹配
1 | |
逻辑说明
- 用户属于
sftp_ro1→ 应用第一块规则,chroot/sftp_jail1,sftp_ro1用户只能看到/sftp_jail1内的内容。- 用户属于
sftp_ro2→ 应用第二块规则,chroot/sftp_jail2,sftp_ro2用户只能看到/sftp_jail2内的内容。- 用户是
sftp_cust03→ 应用第三块规则- 内部管理员账号,不在以上组、不是匹配用户 → 所有 Match 全部不命中,SSH/SCP 完全不受限制。
Match必须写在文件后面位置,写在 Subsystem 后面;不要放在全局配置前面
另外:
如果一个用户同时满足两个 Match 条件,两个 Match 块的参数会叠加生效!
例:用户同时在 sftp_ro1 和 sftp_ro2 组,两个 Match 都会应用,会出现参数冲突(两个 ChrootDirectory),直接导致 ssh 启动失败。
✅ 规避:一个用户只能属于一个 sftp 客户组,不要跨组。
登录
1 | |
本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/24a3e5c2.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!