在CentOS 7及更高版本(包括CentOS Stream、RHEL 8/9)中,authselect是系统自带的身份认证配置管理工具,它统一接管了原本分散在/etc/pam.d/、/etc/nsswitch.conf、/etc/sssd/sssd.conf等多个文件中的认证逻辑。简单来说,你不需要再手动编辑那些复杂的PAM配置文件和SSSD配置文件,只需要用authselect命令就能切换SSSD、LDAP、Kerberos、本地密码等多种认证方式,而且系统会自动帮你生成正确的配置文件,大幅降低配置出错的风险。这是CentOS安全加固中非常实用的一个工具。

为什么CentOS要用authselect替代传统配置方式

过去在CentOS 6时代,如果你要配置LDAP认证或者Kerberos认证,需要手动修改/etc/pam.d/system-auth、/etc/nsswitch.conf、/etc/sssd/sssd.conf等多个文件,任何一个文件写错都会导致用户无法登录。CentOS 7引入SSSD后情况有所改善,但配置仍然繁琐。从CentOS 8开始,Red Hat推出了authselect作为统一的认证配置前端,它的核心优势在于:第一,配置集中管理,一个命令切换认证模式;第二,自动生成所有底层配置文件,避免人为错误;第三,支持自定义profile,满足企业级安全合规需求。

authselect的基本工作原理

authselect本质上是一个配置生成器和选择器。它读取/usr/share/authselect/目录下预定义的profile模板,根据你选择的profile生成对应的PAM、NSS、SSSD配置文件到/etc/目录下。它不直接处理认证过程,而是为PAM、NSS、SSSD等底层组件提供正确的配置。你可以把它理解为一个"认证配置的总开关",切换它就等于切换了整套认证体系。

查看当前authselect状态和可用profile

在开始配置之前,先检查系统当前的认证状态。执行以下命令:

authselect current

这条命令会显示当前正在使用的profile名称以及相关的配置摘要。如果你想查看所有可用的profile列表,执行:

authselect list

输出结果通常包含sssd、winbind、ldap、minimal、local等多个选项。其中sssd是CentOS 8/9默认使用的profile,适合对接AD域或LDAP目录服务;minimal是最精简的本地认证模式;local则是纯本地密码认证,不依赖任何外部服务。

切换到SSSD认证模式(对接AD域/LDAP)

企业环境中最常见的需求是让CentOS机器加入AD域或对接LDAP服务器。使用authselect切换到sssd模式非常简单:

authselect select sssd

执行后系统会提示你确认,输入yes即可。切换完成后,authselect会自动生成/etc/sssd/sssd.conf、/etc/pam.d/system-auth等文件。接下来你需要编辑sssd.conf来填写具体的域信息:

[sssd]
domains = example.com
config_file_version = 2
services = nss, pam

[domain/example.com]
ad_domain = example.com
krb5_realm = EXAMPLE.COM
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
access_provider = ad
fallback_homedir = /home/%u@%d
ad_gpo_access_control = permissive
ldap_id_mapping = True
use_fully_qualified_names = False

配置完成后,重启sssd服务并加入域:

systemctl restart sssd
realm join example.com

使用authselect创建自定义profile实现安全加固

这是authselect最硬核的用法。企业安全合规往往要求特定的PAM策略,比如密码复杂度、登录失败锁定、会话超时等。你可以基于现有profile创建自定义profile来满足这些要求。

首先创建一个自定义profile的目录结构:

mkdir -p /etc/authselect/custom/hardened
cp /usr/share/authselect/default/sssd/*.conf /etc/authselect/custom/hardened/
cp /usr/share/authselect/default/sssd/sssd.conf.example /etc/authselect/custom/hardened/sssd.conf

然后编辑PAM配置,加入安全策略。例如在/etc/authselect/custom/hardened/sssd/pam文件中添加:

auth        required      pam_faillock.so preauth silent deny=3 unlock_time=900
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail deny=3 unlock_time=900
auth        required      pam_deny.so

account     required      pam_faillock.so
account     required      pam_unix.so

password    requisite     pam_pwquality.so try_first_pass retry=3 minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     optional      pam_mkhomedir.so skel=/etc/skel umask=0077

创建profile定义文件:

cat > /etc/authselect/custom/hardened/authselect << 'EOF'
Name: hardened
Description: Hardened authentication profile with security policies
EOF

然后应用自定义profile:

authselect select custom/hardened --force

--force参数会覆盖现有配置,请确保备份。应用后验证:

authselect current

authselect在安全加固中的具体应用场景

场景一:禁用本地root登录,强制使用域账号。在自定义profile中设置pam_succeed_if.so规则,限制root只能通过特定方式登录:

auth required pam_succeed_if.so uid != 0 quiet_success
auth required pam_succeed_if.so user != root quiet

场景二:强制双因素认证。可以在PAM配置中叠加pam_google_authenticator.so或pam_pkcs11.so模块,authselect生成的配置框架完全支持这种叠加。

场景三:审计登录行为。通过在session模块中加入pam_tty_audit.so,所有登录会话都会被记录到/var/log/audit/audit.log中,满足等保合规要求。

authselect与传统手动配置的对比和注意事项

很多运维人员习惯直接编辑/etc/pam.d/system-auth,但这样做有几个风险:第一,系统更新时文件可能被覆盖;第二,多个文件之间的配置容易不一致;第三,排错困难。authselect的优势在于它生成的文件有明确的注释标记"# Generated by authselect",系统更新时会识别这些标记并跳过覆盖。但要注意,如果你在authselect管理的文件上手动修改,下次执行authselect select时会被覆盖掉。所以正确的做法是:要么通过自定义profile修改,要么在/etc/authselect/override/目录下放置覆盖文件。

另外,authselect在CentOS Stream 9和RHEL 9中功能更加完善,支持更细粒度的profile组合。如果你的环境是CentOS 7,虽然也有authselect但功能有限,建议直接升级到8或9以获得完整支持。

常见问题排查

如果切换profile后无法登录,首先检查/var/log/secure日志中的错误信息。常见原因包括:sssd.conf中的域信息填写错误、DNS解析不到域控制器、PAM模块路径不正确。可以用以下命令临时恢复到最小profile来排查:

authselect select minimal --force
systemctl restart sssd

恢复登录后再逐步排查问题。另外,如果你需要查看authselect生成了哪些文件,可以执行:

authselect check

这条命令会检查当前配置的完整性,提示是否有文件缺失或配置冲突。

总结:authselect是CentOS安全管理的必备工具

authselect不是一个可选工具,而是CentOS 8/9系统认证管理的核心组件。它把原本需要深厚PAM和SSSD知识才能完成的配置工作,简化为几条命令。对于安全加固来说,它提供了标准化、可重复、可审计的配置方式。建议所有CentOS服务器管理员都掌握authselect的基本操作,特别是自定义profile的创建方法,这是实现企业级安全合规的高效路径。在实际生产环境中,建议将自定义profile纳入版本管理,配合Ansible等自动化工具批量部署,确保多台服务器的认证配置一致且可追溯。