/etc/pam.d/sshd。/etc/pam.conf,PAM 的配置目录为 /etc/pam.d/。如果 /etc/pam.d/ 目录存在,则 /etc/pam.conf 文件会被忽略。type、control、module-path、module-arguments。type 字段的可选取值及说明如下:type 取值 | 说明 |
账户管理(Account) | 提供账户验证类型的服务,例如检查用户密码是否过期,是否允许访问请求的服务等。 |
认证(Auth) | 对用户进行认证并设置用户证书。可以使用密码、一次性密码、硬件认证等多种方式进行认证。 |
密码管理(Password) | 更新认证机制,常用于管理用户密码的创建、更改和删除。例如设置密码的复杂度、过期时间等。 |
会话管理(Session) | 在用户每次登录和退出时执行一些操作,例如记录用户的登录时间、执行环境设置、设置资源限制、分配文件系统空间等。 |
- 字符,表示如果由于系统中缺少该模块而无法加载该模块,则 PAM 库将不会记录到系统日志中。control 字段的常用取值及说明如下:control 取值 | 说明 |
required(必需) | 模块必须成功执行,否则认证失败。失败后会继续执行后续模块,返回失败信息。 |
requisite(关键) | 模块必须成功执行,否则认证立即失败,不再执行后续模块。 |
sufficient(充分) | 模块成功执行,认证立即成功,不再执行后续模块。如果模块失败,认证不会立即失败,而是继续执行后续模块。 |
optional(可选) | 模块执行结果不影响认证结果,除非它是唯一的模块。 |
include(包含) | 将另一个 PAM 配置文件的内容直接插入到当前配置文件中。 |
substack(子堆栈) | 将当前堆栈暂停,并开始执行被引用文件中的模块。当被引用文件中的所有模块执行完毕后,PAM 会恢复执行当前文件中的下一个模块。 |
[value1=action1 value2=action2 ...]/lib64/security/ 目录下;也可以通过绝对路径使用自定义模块。man pam_unix。pam_listfile.so 模块允许或拒绝特定用户访问某个服务。例如可以进行如下配置阻止 root 用户通过 SSH 登录。/etc/pam.d/sshd 文件,在第一行添加以下规则以阻止 root 用户通过 SSH 登录。该规则通过 pam_listfile.so 模块检查登录用户名是否存在于拒绝列表中,控制标志选用 required,表示只有当模块检查通过(即用户不在拒绝列表中)时,认证才能继续:auth required pam_listfile.so item=user sense=deny file=/etc/ssh/deniedusers onerr=fail
/etc/ssh/deniedusers,添加阻止 SSH 登录的用户名:sudo vim /etc/ssh/deniedusers
sudo chmod 600 /etc/ssh/deniedusers
item=user:指定检查对象为 usersense=deny:指定如果在 file 指定的文件中找到对应 user 要采取的动作,如果找不到则执行相反的动作file=/etc/ssh/deniedusers:指定每行包含一个 user 的文件onerr=fail:指定当错误发生时采取的动作pam_listfile.so 模块的更多参数,请执行 man pam_listfile 查看 man 手册。pam_limits.so 模块对系统资源设置限制。例如可以进行如下配置限制用户登录会话数。/etc/pam.d/login 和 /etc/pam.d/sshd 文件,添加一条规则启用 pam_limits.so 模块:session required pam_limits.so
/etc/security/limits.conf 文件,pam_limits.so 模块默认读取 /etc/security/limits.conf 配置文件和 /etc/security/limits.d/*.conf 文件。添加以下行限制用户 user1 和用户组 group1 的成员在同一时间最多只能有 3 个登录会话:user1 - maxlogins 3@group1 - maxlogins 3
user1 登录多个会话会产生如下提示:There were too many logins for 'user1'.
OPENCLOUDOS.COM。主机名 | 内网 IP | 角色 |
KDC | 192.168.160.161 | Master KDC |
Client | 192.168.160.165 | Kerberos Client |
/etc/hosts 文件中配置如下,确保主机名能够被解析:192.168.160.161 KDC192.168.160.165 Client
dnf install krb5-server krb5-workstation krb5-libs
/etc/krb5.conf,对 Kerberos 认证服务进行配置,所有使用 Kerberos 的主机上的文件都需要同步该文件。[libdefaults]default_realm = OPENCLOUDOS.COM[realms]OPENCLOUDOS.COM = {kdc = 192.168.160.161admin_server = 192.168.160.161}
/var/kerberos/krb5kdc/kdc.conf,修改 KDC 服务器上 Kerberos 域的配置信息。[realms]OPENCLOUDOS.COM = {acl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsdefault_principal_flags = +preauthadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_enctypes = aes256-cts:normal aes128-cts:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal}
/var/kerberos/krb5kdc/kadm5.acl,该文件控制 Kerberos 数据库的管理权限,授予 admin 主体完全访问权限。*/admin@OPENCLOUDOS.COM *
*/admin 是 Kerberos 中的账户形式,这个账户属于 OPENCLOUDOS.COM 这个域,最后的 * 表示符合 */admin 的账户拥有所有权限。kdb5_util create -s -r OPENCLOUDOS.COM
-s 表示创建安全的 Kerberos 数据库,-r 指定数据库的 Kerberos 领域。数据库创建成功后,会在 /var/kerberos/krb5kdc/ 目录下生成新文件。kadmin.local -q "addprinc root/admin"
kadmin.local -q "addprinc krbtest/admin"
listprincs 命令查看所有用户:kadmin.localkadmin.local: listprincs
sudo systemctl start krb5kdcsudo systemctl start kadminsudo systemctl enable krb5kdcsudo systemctl enable kadmin
/var/log/krb5kdc.log 和 /var/log/kadmind.log。firewall-cmd --add-service=kerberos --permanentfirewall-cmd --add-service=kadmin --permanentfirewall-cmd --add-service=kpasswd --permanentfirewall-cmd --reload
dnf install krb5-workstation krb5-libs
krb5.conf 文件保持一致。kinit 命令验证 KDC 颁发票据。票据会存储在凭证缓存文件中,该命令也可用于测试 Kerberos 认证服务:kinit krbtest/admin
klist
kdestroy
idm.example.com 域生成报告:sssctl access-report idm.example.com
sssctl user-checks -a acct -s sshd example.user
sssctl domain-list
sssctl domain-status idm.example.com
sssctl config-check
/etc/sssd/sssd.conf 文件中添加如下选项:[domain/your-domain-name]cache_credentials = true
[pam]offline_credentials_expiration = 3
offline_credentials_expiration 默认为 0,即不限制。/etc/sssd/sssd.conf 文件中添加如下选项:[domain/your-domain-name]id_provider = ldapldap_uri = _srv_chpass_provider = ldapldap_chpass_dns_service_name = ldap
dns_discovery_domain 选项指定域名。ldap_dns_service_name 选项指定类型。lookup_family_order 选项。access_provider 设置为 simple 模式,可以基于用户名或组允许或拒绝访问:[domain/your-domain-name]access_provider = simplesimple_allow_users = user1, user2simple_allow_groups = group1
dnf -y install openldap-clients sssd sssd-ldap oddjob-mkhomedir
authselect select sssd with-mkhomedir
/etc/openldap/certs 目录:cp core-dirsrv.ca.pem /etc/openldap/certs
/etc/openldap/ldap.conf 文件中:URI ldap://ldap-server.example.com/BASE dc=example,dc=com
/etc/openldap/ldap.conf 文件的 TLS_CACERT 选项指定证书路径:TLS_CACERT /etc/openldap/certs/core-dirsrv.ca.pem
/etc/sssd/sssd.conf 文件中,将环境信息添加到 ldap_uri 和 ldap_search_base 参数中:[domain/default]ldap_uri = ldap://ldap-server.example.com/ldap_search_base = dc=example,dc=com
/etc/sssd/sssd.conf 文件中指定 TLS 身份验证要求:cache_credentials = Trueldap_tls_cacert = /etc/openldap/certs/core-dirsrv.ca.pemldap_tls_reqcert = hard
/etc/sssd/sssd.conf 文件的权限:chmod 600 /etc/sssd/sssd.conf
systemctl restart sssd oddjobdsystemctl enable sssd oddjobd
id 命令指定 LDAP 用户从 LDAP 服务器检索用户数据:id <ldap_user>
文档反馈