PAM可以说是一套应用程序编程接口,它提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM后,PAM就能够回报用户验证结果(成功或失败)。
PAM通过一个与程序相同文件名的配置文件来进行一连串的认证分析需求。以passwd为例,当你执行passwd后,这个程序调用PAM的流程:
1、用户开始执行/usr/bin/passwd这支程序,并输入密码
2、passwd调用PAM模块进行验证
3、PAM模块会到/etc/pam.d/中寻找与程序(passwd)同名的配置文件
4、依据/etc/pam.d/passwd内的设置,引用相关的PAM模块逐步进行验证分析
5、验证结果(成功、失败或其他信息)回传给passwd这个程序
6、passwd这支程序会根据PAM回传的结果决定下一个操作
看看/etc/pam.d/passwd这个配置文件
- [root@mkk ~]# cat /etc/pam.d/passwd
- #%PAM-1.0
- auth include system-auth
- account include system-auth
- password include system-auth
- 验证类型 控制标准 PAAM模块与该模块参数
第一个字段:验证类型(type)
验证类型分为四种:
auth:是authention(认证)的缩写,所以这个种类型主要用来检验用户的身份验证。
account:account(账号)则大部份是在进行授权,主用用来检验用户是否具有正确的权限
session:session是会议期间的意思,所以session管理的就是用户在这次登陆(或使用这个命令)期间PAM所给予的环境设置
password:password就是密码,主要用于提供验证的修订工作,就是修改密码。
第二个字段:验证的控制标示
验证的控制标示主要也分四种控制方式:
required:这类标示为,不论验证成功或失败都继续验证
requisite:这类标示为,失败则不在进行验证,只有成功才继续验证
sufficient:这类标示为,验证成功则不进行验证,验证失败就继续验证
optional:这类标示,更多是显示信息,而不进行验证
常见模块简介
首先看看我们的登陆(login)模块
- [root@mkk ~]# cat /etc/pam.d/login
- #%PAM-1.0
- auth [user_unknown=ignore success=ok ignoreignore=ignore default=bad] pam_securetty.so
- auth include system-auth
- 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 include system-auth
- 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 optional pam_keyinit.so force revoke
- [root@mkk ~]# 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 sufficient pam_unix.so nullok try_first_pass
- auth requisite pam_succeed_if.so uid >= 500 quiet
- auth required pam_deny.so
- account required pam_unix.so
- account sufficient pam_succeed_if.so uid < 500 quiet
- account required pam_permit.so
- password requisite pam_cracklib.so try_first_pass retry=3
- password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
- password required pam_deny.so
- session optional pam_keyinit.so revoke
- session required pam_limits.so
- session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
- session required pam_unix.so
上面使用了非常多的PAM模块,每个模块功能都不太相同,详细的模块情报可以在系统中在找到
/etc/pam.d/*:每个程序个别的PAM模块配置文件;
/lib/security/*:PAM模块文件的实际放置目录;
/etc/security/*:其他PAM环境的配置文件;
/usr/share/doc/pam-*/:详细的PAM说明文件。
简单的介绍比较常用的模块
pam_securetty.so:
限制系统管理员(root)只能够从安全的终端机登陆。所谓的安装终端可以在/etc/securetty这个配置文件中设置
pam_nologin.so
这个模块可以设置一般用户能否登陆系统,样/etc/nologin这个文件存在时,则所有一般用户均无法登陆系统,但对root没有影响。
pam_selinux.so
SElinux是针对程序来进行详细管理权限的功能
pam_console.so
当系统出现某些问题时,或某些时刻你需要使用特殊的终端接口登陆主机时,这个模块可以帮你处理文件权限问题,让用户可以通过特殊终端接口顺利登陆系统
pam_loginuid.so
验证用户的UID真的是我们需要的数值,可以用这个模块来进行规范
pam_env.so
用来设置环境变量一个模块,如果你需要额外的环境变量设置,可以参考/etc/security/pam_env.conf这个文件的详细说明
pam_UNIX.so
这个模块可以用于验证阶段的认证功能,可以用于授权阶段的账号可许证管理,可以用于会议阶段的日志文件记录等。
pam_cracklib.so
可以用来检验密码强度
pam_limits.so
可以参考/etc/security/limits.conf内的说明
转载于:https://blog.51cto.com/aixecc/817180