KingbaseES集群部署系列之---sshd启用UsePAM部署失败案例

案例说明:
kylin v10 Server脚本部署KingbaseES V8R6集群,集群节点创建ssh互信后,在通过ssh连接检查节点文件系统空间时,语句执行失败,部署被终止。

适用版本:
KingbaseES V8R6

操作系统:

[root@1-0003 ~]# cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Lance)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Lance)"
ANSI_COLOR="0;31"

一、问题现象
如下所示,执行集群脚本部署,在检测主机文件系统空间时,语句执行失败,部署被终止:

二、问题分析

1、检测节点之间ssh互信
如下所示,检测节点ssh互信正常:

[kingbase@1-0003 ~]$ ssh root@10.100.33.21
Authorized users only. All activities may be monitored and reported.
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Thu Jun 19 10:58:33 2024 from 172.25.144.27
[root@1-003 ~]#

2、执行脚本报错语句
如下所示,正常执行此语句,输出被检测文件系统的大小,但此语句执行后无输出结果:

[kingbase@1-0003 install]$  ssh -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no  
-l root -T 10.100.33.21  'df /home/kingbase -P 2>/dev/null |head -n 2|tail -n +2
|awk '\''{print $4}'\'''

[kingbase@1-0003 install]$

# 查看语句执行结果:
[kingbase@1-0003 install]$ echo $?
1
---语句执行失败。

正常输出的结果:

[root@kysrv pam.d]#  ssh -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no  
-l root -T 127.0.0.1 'df /home/kingbase -P 2>/dev/null |head -n 2|tail -n +2
|awk '\''{print $4}'\'''

48822244

[root@kysrv pam.d]# echo $?
0

3、检查系统ssh配置
如下所示,在ssh的配置中,UsePAM为yes:

[root@1-0003 pam.d]# cat /etc/ssh/sshd_config|grep -i usepam
# WARNING: 'UsePAM no' is not supported in kylin and may cause several
UsePAM yes

# 执行测试语句
[root@1-0003 ~]# ssh -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no 
 -l root -T 10.100.33.21 'ls -l' 
 
 ---无输出结果,执行不成功。

将UsePAM配置为no,重启sshd服务:
如下所示,执行以下测试语句成功:

[root@1-0003 ~]# ssh -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no 
 -l root -T 10.100.33.21 'ls -l'     
总用量 32
.......
-rw------- 1 root root  2748 12月 26 17:44 anaconda-ks.cfg
-rw-r--r-- 1 root root  3154 12月 26 17:52 initial-setup-ks.cfg
-rwxr-xr-x 1 root root 16640  1月 11 14:26 test
-rw-r--r-- 1 root root   113  1月 11 14:25 test.c

4、查看部署脚本
如下所示,脚本在执行过程中,会检查系统sshd_config配置文件,并修改UsePAM为yes:

......
    execute_command ${super_user} $ip "test -f /etc/ssh/sshd_config"
                if [ $? -eq 0 ];then
                    echo "$(date +"%Y-%m-%d %T") [INFO] change UsePAM on $ip ..."
                    execute_command ${super_user} $ip "sed -i \"s/^UsePAM[ ]*/#UsePAM/g\" /etc/ssh/sshd_config"
                    execute_command ${super_user} $ip "echo \"\" >> /etc/ssh/sshd_config"
                    execute_command ${super_user} $ip "echo \"UsePAM yes\" >> /etc/ssh/sshd_config"
                    echo "$(date +"%Y-%m-%d %T") [INFO] change UsePAM on $ip ... Done"
                    execute_command ${super_user} $ip "systemctl restart sshd 1>/dev/null 2>&1"
                    execute_command ${super_user} $ip "service sshd restart 1>/dev/null 2>&1"
......  

三、问题解决
方案1、配置sshd_config文件中,UsePAM为no,重启sshd服务后,注释部署脚本中对UsePAM检查和修改语句,再执行部署。
方案2、无需修改部署脚本,只需在操作系统创建: /etc/pam.d/sshd文件,内容如下:

[root@1-0003 pam.d]# cat /etc/pam.d/sshd
#%PAM-1.0
auth       substack     password-auth
auth       include      postlogin
account    required     pam_sepermit.so
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    optional     pam_motd.so
session    include      password-auth
session    include      postlogin

如果此文件已经存在,注意取消以下三行的注释:

四、总结
对于UsePAM=yes的配置,会影响到sshd及securecmdd服务的连接,相关具体资料可以查看网上关于PAM认证的介绍。
PAM(插入式验证模块(Pluggable Authentication Module,PAM))
简单来说,就是提供了一组身份验证、密码验证的统一抽象接口,应用程序员可以使用这些API接口来实现与安全性相关的功能。

posted @ 2024-06-20 14:39  天涯客1224  阅读(2)  评论(0编辑  收藏  举报