sftp连接服务器报client_loop: send disconnect: Broken pipe的问题分析

服务器 0

一、问题现象

sftp连接服务器报"client_loop: send disconnect: Broken pipe"错误,连接被服务器关闭,相关信息如下:

# sftp sftp_ppp@1192,168,1.106sftp_ptn@10.193.217.106's password: client_loop: send disconnect: Broken pipeConnection closed.  Connection closed

二、问题排查

检查后台日志,显示如下错误:

bad ownership or modes for chroot directory "/data/sftp_ppp"

三、报错分析

这个错误日志出现配置SFTP服务时,服务器侧chroot目录的所有权或权限设置的不正确。chroot目录是指SFTP会将用户限制在某个目录内,该目录被称为“根目录”(root directory)。所谓chroot,即change root directory(更改根目录),意味着SFTP会将用户的根目录更改为你指定的这个chroot目录。

问题出现的原因可能有:

  1. 目录的所有者不是root。

  2. 目录权限不合适,通常chroot目录的权限需要严格设置,只有root用户可以读写执行,其他用户不可访问通常是755或700)。

四、解决方法

以下步骤操作在服务器端进行操作:

1、检查权限

使用ls -ld 查看相关目录的所有权

# ll -ld /data     drwxr-xr-x. 28 root root 4.0K  4月 17 16:09 /data# ll -ld /data/sftp_pppdrwx------. 2 sftp_ppp sftp_ppp 109  5月 16 11:26 /data/sftp_ppp
2、结果分析

本例/data/sftp_ppp目录为提供给sftp_ppp用户数据目录,如上检查发现/data为root用户所有,权限755,满足要求,sftp_ppp目录属主为sftp_ppp用户,权限为775,作为chroot目录不满足要求。因此需新增chroot目录,把用户数据目录移到其下,并调整权限:

# mkdir -p /data/home# chown root:root /data/home && chmod 755 /data/home# mv /data/sftp_ppp /data/home# chmod 755 /data/home/sftp_ppp # 或 chmod 700 /data/home/sftp_ppp# chown sftp_ppp:sftp_ppp /data/home/sftp_ppp -R
3、配置SFTP服务器

在SFTP服务器etc/ssh/sshd_config中如下进行配置:

Match User sftp_ppp 
ChrootDirectory /home/data
ForceCommand internal-sftp 
AllowTcpForwarding no 
X11Forwarding no

用户登录以后,在/sftp_ppp目录中进行数据存取。

4、重启SFTP服务器

更改配置后需要重启服务器SSHD服务以使更改生效。

也许您对下面的内容还感兴趣: