sshd自带SFTP全是坑
1.背景
用户有大量的文件要进行分析和监控,进过沟通与交流,我们作为乙方提供以下几种方式进行汇聚文件,供甲方用户进行选择。
- agent方式:
通过该方式直接在用户的主机上部署agent客户端,采集甲方制定文件进行汇聚,该方式用户需要提供需要采集的主机账号和密码。 - sftp方式:
通过该方式我们作为乙方提供sftp服务器,甲方直接将文件上传到sftp服务器就可以,作为乙方的我们需要提供和规划sftp服务器的账号密码、存储周期和现有服务器文件存储是否足够的问题。
1.1部署
注意事项
- sftp可以使用linux账号进行登录,但是一般linux账号的权限都很大,所以我们要创建单独的账号给sftp用。
- sftp所属目前对文件权限积极苛刻,由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是 root。由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限 755)
1.1.1创建用户
为sftp创建用户和制定文件所属目录。
sudo useradd -m -d /opt/sftp/sftpdir -s /sbin/nologin sftpuser
1.1.2修改sshd_config文件
执行vim /etc/ssh/sshd_config
修改sshd配置文件,修改以下内容。
注释Subsystem sftp /usr/libexec/openssh/sftp-server配置,新增Subsystem sftp internal-sftp配置
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
#sftp新增配置
Match User sftpuser
ChrootDirectory /opt/sftp/sftpdir
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
1.1.3 重启sshd服务器
执行systemctl restart sshd
重启sshd服务。
1.1.4 可能存在的问题
-
修改/etc/ssh/sshd_config文件后,重启 sshd服务
报错:Directive ‘UseDNS’ is not allowed within a Match block
原因:新增的配置位置有问题,因Linux配置文件的加载顺序是从上往下进行加载的,该问题就是因为新增的配置内容加载顺序的问题,只需要将新增的配置内容放在文件最末尾,然后重启sshd即可。 -
通过
sftp sftpuser@127.0.0.1
连接sftp
排查思路:命令行保存内容管道破裂不知所以然,我又在/var/log/secure日志文件查看日志。
命令行报错:client_loop: send disconnect: Broken pipe
sshd日志报错:fatal: bad ownership or modes for chroot directory “/opt/sftp/sftpdir”
原因:是由于/opt/sftp/sftpdir文件的属组和权限导致的。
解决方式:由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是 root。由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限 755)
1.1.5 登录
sftp sftpuser@127.0.0.1 登录到sftp服务中。
put 文件路径和文件名进行测试,正常。
1.2 后期规划
1.2.1 多用户
随着业务量的增多,会有多个业务或者多个甲方进行文件上传。这时我们sftp可以创建多个sftp用户,然后给这些不同的用户有不同的ChrootDirectory 指向就可以。
技术交流QQ:870648354
才华不溢,梦想依旧
唯心沉淀,遨游宇宙