继前几天的文章,linux密码登陆时加入自己登陆验证模块(pam),继续发布此文章。
按照“linux密码登陆时加入自己登陆验证模块(pam)”配置后,使用xshell进行ssh登陆很顺利,然后xftp登陆却不顺利,密码验证通过后,xftp工具无响应。
排查原因:
第一步,打开sftp-server的日志
1、修改ssh的配置 vi /etc/ssh/sshd_config 在146行左右修改如下配置 Subsystem sftp /usr/libexec/openssh/sftp-server -l DEBUG3 -f local5 sftp-server的参数用法详情参考'man SFTP-SERVER' 注:如文件中已经存在如下配置,请先注释 2、修改rsyslog配置 vi /etc/rsyslog.conf 在最后增加如下配置 auth,authpriv.*,local5.* /var/log/sftp.log
3、重启服务 service rsyslog restart service sshd restart
4、查看日志 tail -f /var/log/sftp.log
发现修改pam登陆方式后,sftp-server没有进行relpath步骤及后面的目录打开步骤(读取目录列表)。
指定使用sftp服务使用系统自带的internal-sftp,就可以顺利登陆了。
vi /etc/ssh/sshd_config
在146行左右修改如下配置
Subsystem sftp /usr/libexec/openssh/internal-sftp
从功能的角度来看,sftp-server和internal-sftp几乎完全相同。 它们是使用相同的源代码构建的
internal-sftp的另一个优点是性能,因为没有必要为它运行新的子进程。
可以为internal-sftp进一步配置,配置如下:
新增sftp服务器及用户 新增sftp组 groupadd sftp 添加用户,并更改用户密码 sudo useradd -g sftp -s /sbin/nologin -M xxx sudo passwd xxx 更改目录权限 sudo mkdir –p /data/xxx sudo chown xxx:sftp /home/data/xxx 更改sftp设置 sudo vi /etc/ssh/sshd_config #注释掉这行 #Subsystem sftp /usr/libexec/openssh/sftp-server 添加这行 Subsystem sftp internal-sftp #指定使用sftp服务使用系统自带的internal-sftp,如果不添加,用户无法通过sftp登录。 #添加在配置文件末尾 Match User sftpuser#匹配用户,如果要匹配多个组,多个组之间用逗号分割 ChrootDirectory /home/data/ #用chroot将指定用户的根目录 /home/data 一定要归属root ForceCommand internal-sftp #指定sftp命令 X11Forwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
AllowTcpForwarding no 重启服务 systemctl restart sshd.service
参考:
指定使用sftp服务使用系统自带的internal-sftp https://www.jianshu.com/p/186a8fa0237f
SFTP配置 https://blog.csdn.net/zhichao_qzc/article/details/80301994
【OpenSSH】internal-sftp和sftp-server之间的区别和联系什么? https://www.jianshu.com/p/f24d8ca565d7