KingbaseES 高可用组件sys_securecmdd之二---sys_securecmdd连接之UsePAM

背景:
sys_securecmdd是KingbaseES集群中自带的工具,集群监控、管理集群时通过sys_securecmdd安全执行命令。在一些禁止使用ssh的通用机或者是专用机环境中,可以通过sys_securecmdd工具实现节点之间远程连接后执行相应的命令。
关于PAM:
PAM(插入式验证模块(Pluggable Authentication Module,PAM)),简单来说,就是在操作系统提供了一组身份验证、密码验证的统一抽象接口,应用程序员可以使用这些API接口来实现与安全性相关的功能。

案例说明:
默认在部署securecmdd工具后,配置文件securecmdd_config中配置参数UsePAM=yes,在一些生产环境中,通过脚本部署集群或启动集群时,会出现sys_securecmdd连接失败的问题。通过本案例,用户将了解sys_securecmdd中UsePAM的具体配置和故障解决方案。

一、问题现象
如下所示,通过sys_securecmdd客户端连接服务端测试,连接失败(包括kingbase和root用户)。

[kingbase@node202 bin]$ ./sys_securecmd root@192.168.1.201
Last login: Tue Feb  6 10:24:05 2024 from 192.168.1.1
Connection to 192.168.1.201 closed.

注: 192.168.1.201 为服务端ip。

二、问题分析
sys_securecmdd连接通过公钥和私钥建立互信,首先要确认公钥和私钥文件文件在sys_securecmdd部署完成后,文件属性正常。如下所示,以下为正常的文件属性:
1、查看securecmdd相关文件属性
1)查看kingbase和root宿主目录属性

[root@node201 ~]# ls -lhd /root
dr-xr-x--- 17 root root 4.0K  2月  6 10:20 /root

[root@node201 ~]# ls -lhd /home/kingbase
drwx------ 12 kingbase kingbase 336  2月  5 15:47 /home/kingbase

2)查看kingbase 和 root下认证文件属性

[root@node201 ~]# ls -lh /root/.es
总用量 8.0K
-rw------- 1 root root  381  2月  5 15:47 accept_hosts
-rw------- 1 root root 1.7K  2月  5 15:47 key_file

[root@node201 ~]# ls -lh /home/kingbase/.es
总用量 8.0K
-rw------- 1 kingbase kingbase  381  2月  5 15:47 accept_hosts
-rw------- 1 kingbase kingbase 1.7K  2月  5 15:47 key_file

2、通过debug模式诊断sys_securecmdd连接
1)启动sys_securecmdd到debug模式
如下所示,可以将集群任一节点作为服务端,启动sys_securecmdd到debug模式,启动后,服务停留在诊断模式,等待客户端的连接:

[root@node201 bin]# /home/kingbase/cluster/securecmdd/bin/sys_securecmdd -D -ddd
......
注:root用户启动,服务启动必须以绝对路径方式。

2)客户端建立连接测试

[kingbase@node202 bin]$ ./sys_securecmd root@192.168.1.201 -vvv
......
注: 192.168.1.201 为服务端ip。

3)服务端诊断信息(客户端执行连接后出现debug日志)

[root@node201 bin]# /home/kingbase/cluster/securecmdd/bin/sys_securecmdd -D -ddd
.....
debug1: PAM: initializing for "root"
debug1: PAM: setting PAM_RHOST to "192.168.1.202"
debug1: PAM: setting PAM_TTY to "ssh"
debug2: monitor_read: 100 used once, disabling now
debug3: mm_request_receive: entering
debug3: monitor_read: checking request 4
debug3: mm_answer_authserv: service=ssh-connection, style=
debug2: monitor_read: 4 used once, disabling now
debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth]
......
debug1: do_pam_account: called
debug2: do_pam_account: auth information in SSH_AUTH_INFO_0
debug3: PAM: do_pam_account pam_acct_mgmt = 7 (Authentication failure)
debug3: PAM: do_pam_account ES set pam_acct_mgmt = 0
......
debug1: PAM: establishing credentials
debug1: PAM: pam_setcred(): Failure setting user credentials
debug3: PAM: opening session
debug2: do_pam_session: auth information in SSH_AUTH_INFO_0
debug1: auth_restrict_session: restricting session
debug1: auth_activate_options: setting new authentication options
PAM: pam_open_session(): Cannot make/remove an entry for the specified session
.......
debug3: receive packet: type 1
Received disconnect from 192.168.1.202 port 54753:11: disconnected by user
Disconnected from user root 192.168.1.202 port 54753
debug1: do_cleanup
debug1: PAM: cleanup
debug3: PAM: sshpam_thread_cleanup entering

4)客户端诊断信息

[kingbase@node202 bin]$ ./sys_securecmd root@192.168.1.201 -vvv
......
debug2: channel 0: is dead
debug2: channel 0: garbage collecting
debug1: channel 0: free: client-session, nchannels 1
debug3: channel 0: status: The following connections are open:
  #0 client-session (t4 r0 i3/0 o3/0 e[write]/0 fd -1/-1/7 sock -1 cc -1 io 0x00/0x00)
debug3: send packet: type 1
Connection to 192.168.1.201 closed.
Transferred: sent 2816, received 2716 bytes, in 0.0 seconds
Bytes per second: sent 65443.4, received 63119.5

如上所示,在执行debug诊断后,服务端出现大量PAM认证失败的日志信息,可以判断客户端连接sys_securecmdd服务失败和PAM认证有关。

4、检查sys_securecmdd下PAM认证配置
如下所示,默认在sys_securecmdd部署后,启用了PAM认证。

[root@node201 pam.d]# cd /etc/.kes
[root@node201 .kes]# cat securecmdd_config |grep -i pam
UsePAM yes

三、问题解决
PAM实现应用程序认证功能,主要是调用PAM API接口来实现;应用程序调用PAM API接口,从而通过PAM服务(PAM Service Modules)实现配置的功能模块(PAM Modules)功能调用,完成认证服务。在后端还可与系统认证凭证、LDAP专用服务器实现认证信息交互。

方案1、禁用PAM认证(对于认证安全性要求较低,无需PAM认证的环境,可以禁用PAM认证)
如下所示,在所有节点配置文件中禁用PAM认证,并重启sys_securecmdd服务:

[root@node201 .kes]# cat securecmdd_config |grep -i pam
UsePAM no

方案2、配置PAM认证配置文件(需要启用PAM认证的环境)
PAM化的应用程序配置文件,主要由两部分构成。第一部分是PAM软件中,针对每一个应用程序构建独立的配置文件(路径:/etc/pam.d);第二部分是应用程序自身的配置文件,主要决定是否调用PAM功能模块。

1)sys_securecmdd的PAM认证配置文件创建
如下所示,默认sys_securecmdd的部署脚本sys_HAscmdd.sh,当执行脚本时会通过复制ssh的/etc/pam.d/sshd配置文件生成sys_securecmdd的PAM认证文件。
但是当/etc/pam.d/sshd缺失时,将无法创建sys_securecmdd的PAM认证文件。

[root@node201 bin]# cat sys_HAscmdd.sh
.......
     ## copy the /etc/pam/sys_securecmdd, do nothing if failed
    if [ ! -f /etc/pam.d/sys_securecmdd ] && [ -f /etc/pam.d/sshd ]
    then
        cp -f /etc/pam.d/sshd /etc/pam.d/sys_securecmdd 2>/dev/null
    fi
    if [ -f /etc/pam.d/sys_securecmdd ]
    then
        sed "s/\(.*pam_tally2.so[ ]*\)$/#\1/g" /etc/pam.d/sys_securecmdd > ${share_dir}/pam_sys_securecmdd_temp && cat ${share_dir}/pam_sys_securecmdd_temp > /etc/pam.d/sys_securecmdd
        [ -f ${share_dir}/pam_sys_securecmdd_temp ] && /bin/rm -f ${share_dir}/pam_sys_securecmdd_temp
    fi
........   

2)查看sys_securecmdd的PAM认证配置文件

# ssh的PAM认证配置文件
[root@node201 bin]# ls -lh /etc/pam.d/sshd
-rw-r--r-- 1 root root 904 Feb  5 15:20 /etc/pam.d/sshd

# sys_securecmdd的PAM认证配置文件
[root@node201 pam.d]# ls -lh /etc/pam.d/sys_securecmdd
-rw-r--r--. 1 root root 904 Aug 25 16:49 /etc/pam.d/sys_securecmdd

3)查看配置文件内容

[root@node201 bin]# cat /etc/pam.d/sys_securecmdd
#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
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    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare

PAM 模块是按模块类型归类的。任何给定的模块至少要实现四种模块类型功能之一:
1. 验证模块(auth): 用于验证用户或设置/销毁凭证
2. 帐户管理模块(account): 将执行与访问、帐户及凭证有效期、密码限制/规则等有关的操作
3. 会话管理模块(session): 用于初始化和终止会话。
4. 密码管理模块(password)将执行与密码更改/更新有关的操作

如上所示,通过创建sys_securecmdd的PAM认证配置文件,sys_securecmdd连接问题解决。以上方案在CentOS、Kylin等系统下验证成功。
UOS系统版本较多,不同的版本/etc/pam.d/下PAM认证配置不同,方案2需要根据PAM的认证配置具体解决。

四、总结
对于sys_securecmdd配置UsePAM=yes,生产环境可能会影响到sys_securecmdd服务的连接,可以参考本文描述的解决方案进行处理。

posted @   天涯客1224  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示