Linux PAM 可插拔认证模块介绍

发布时间: 更新时间: 总字数:1160 阅读时间:3m 作者: IP上海 分享 网址

本文介绍Linux PAM的工作机制和实现。Linux PAM(Pluggable Authentication Modules, 可插拔认证模块)是一套库,允许 Linux 系统管理员配置对用户进行认证的方法。

介绍

PAM 通过使用配置文件而不是更改应用程序代码,它提供了一种灵活且集中的方式来切换受保护应用程序的身份验证方法。PAM 提供了一整套的鉴权、授权、密码管理、会话管理机制等。

运行机制

                                              / -> auth 认证管理
                                             /  -> account 账号管理
login -> PAM(libpam.so 解析 /etc/pam.d/login)
                                             \  -> password 密码管理
                                              \ -> session 会话管理
[root@xiexianbin_cn ~]# ldd /usr/bin/login | grep pam
	libpam.so.0 => /lib64/libpam.so.0 (0x00007f7d16fb3000)
	libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007f7d16daf000)
pamd-login
[root@xiexianbin_cn ~]# cat /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       substack     system-auth
auth       include      postlogin
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so
[root@xiexianbin_cn ~]# cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
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_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

配置信息

PAM 会根据配置中的模块名称从 ls -lhart /usr/lib64/security | grep pam 查找 .so 文件。

模块类型

  • auth(认证管理):对用户的身份进行识别,如提示用户输入密码等
  • account(账号管理):对帐号的各项属性进行检查,如是否允许登录、是否达到最大用户数、root 用户是否允许在这个终端登录等
  • password(密码管理):修改用户密码
  • session(会话管理):定义用户登录前的及用户退出后所要进行的操作,如登录信息、用户数据的打开与关闭、挂载文件系统等。

如果在模块类型的开头有个短横线 - ,表示如果找不到这个模块导致无法加载,这一事件不会被记录在日志中,适用于哪些非必须的验证功能。

控制标记

控制标记用来处理和判断各个模块的返回值:

  • required 即使某个模块对用户的验证失败,也要等所有的模块都执行完毕后才返回错误信息
  • requisite 如果某个模块返回失败,则立刻返回失败,不再进行同类型后面的操作
  • sufficient 如果验证通过,则立即返回验证成功消息,无论前面模块是否有失败,而且也不再执行后面模块。如果验证失败,sufficient 的作用和 optional 相同
  • optional 即使指定的模块验证失败,也允许用户接受应用程序提供的服务,一般返回 PAM_IGNORE
  • include 包含一个新的配置文件进行验证
  • substack 与 include 类似,区别是,include 调用文件执行时有 die 或者 bad 则立即返回调用处,而 substack 则等待文件执行完

常用模块

pam_unix.so
  auth       提示用户输入密码,并与/etc/shadow文件相比对,匹配返回0
  account    检查用户的账号信息(如是否过期),帐号可用时返回0
  password   修改用户的密码,将用户输入的密码,作为用户的新密码更新shadow文件

pam_shells.so
  auth account 如果用户想登录系统,那么它的shell必须是在/etc/shells中

pam_deny.so
  auth account password session 用来拒绝访问

pam_permit.so
  auth account password session 任何时候都返回成功

pam_cracklib.so
  password 提示用户输入密码,并与系统中的字典进行比对,检查密码的强度

pam_securetty.so
  auth 用户要以root登录时,则登录的tty必须在/etc/securetty中

部分内容转载自互联网

Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数