linux基础--pam
PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。
Linux-PAM便是PAM在Linux上的实现,获得了几乎所有主流Linux发行版的支持。Linux-PAM的目标同PAM一致,都是为了给程序的开发人员提供一套统一的认证接口。
当pam安装之后有两大部分:在/lib/…/security目录下的各种pam模块(动态链接库)以及/etc/pam.d目录下的针对各种服务和应用已经定义好的pam配置文件。/etc/security下的文件对于每个pam模块做了具体的配置,比如:parm_limits.so的配置文件就是/etc/security/limits。
PAM配置文件
PAM配置文件可通过两种方式配置 PAM:
基于文件的配置 (/etc/pam.conf):每个服务的配置储存在/etc/pam.conf中。格式如下:
服务名称 模块类型 控制标记 模块路径 模块参数
基于目录的配置 (/etc/pam.d/)
依赖于PAM机制的每个服务(或程序)在/etc/pam.d/目录中都有各自的配置文件。例如,可以在/etc/pam.d/sshd文件中找到sshd的服务。其内容不包含服务名称,而/etc/pam.d/目录下文件的名字就是服务名称,还有些配置文件比较通用,经常被别的配置文件引用,也放在这个文件夹下,比如/etc/pam.d/system-auth。格式如下:
模块类型 控制标记 模块路径 模块参数
1、模块类型
PAM有四种模块类型,分别代表四种不同的任务,它们是:
认证管理(auth)、账号管理(account)、会话管理(session)、密码(password)管理
2、PAM的控制标记
PAM使用控制标记来处理和判断各个模块的返回值。
3、模块路径
模块路径,即要调用模块的位置,一般保存在/lib/…/security,如: pam_unix.so
同一个模块,可以出现在不同的类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型,编制了不同的执行函数。
4、模块参数
模块参数,即传递给模块的参数,参数可以有多个,之间用空格分隔开,如:
password required pam_unix.so nullok obscure min=4 max=8 md5
常见模块
(1) pam_access|登陆访问限制模块
该模块主要用于对访问进入管理,提供基于登录名、主机名或域名、公网 IP 地址或网络号,以及非网络登录时的 tty 名称的访问控制。
(2) pam_cracklib|密码策略验证模块
该模块通常与password验证类型一起使用,通过插入 password 堆栈为特殊的应用提供可插入式密码强度性检测,它是PAM 配置接口的基本模块。
(3) pam_limit|资源服务限制模块
该模块通常与session验证类别一同使用,它主要用来限制用户在会话过程中对系统资源的使用,即使 UID=0 的用户也受它的限制。
(4) pam_time|日期时间终端限制模块
该模块通常与 account 验证类型一起使用,它并不对用户提供验证服务,而是用来限制用户在指定的日期、时间及终端线路上对系统或特定应用程序进行访问。
(5) pam_listfile|文件服务访问验证模块
该验证模块通常与 auth 验证类型一起使用,此模块提供根据某个指定的文件来允许或禁止用户访问某个应用程序或服务的功能,这些被指定的文件必需事先存在,然后通过 file 参数来指定该文件。
(6) pam_unix|认证类型验证模块
该模块提供基于/etc/passwd和/etc/shadow文件的类UNIX风格的认证,它适用所有的验证类型,包括: auth、account、password、session
(7) pam_deny|配置访问验证模块
该验证模块可以用来禁止所有的访问,当你设置 PAM 配置文件时,为了安全,在开始的行可以使用它来禁止所有的访问,以减少错误配置引起的安全风险。
而pam_permit验证模块却总是允许所有的访问,你要谨慎的使用此验证模块。它们都适用于所有的验证类型。
(8) pam_rootok|验证模块
该验证模块允许/etc/pam.d/su中的用户不需要任何验证就可以登录系统。因此你应当小心设置/etc/pam.d/su文件,并且在使用时要与pam_wheel验证模块一同使用,以保证root权限只允许在pam_wheel的限制中进行。它只适用于auth验证类型。
(9) pam_security|验证模块
该验证模块只对 root 用户有影响。当root用户登录时,pam_security 验证模块会参考 /etc/securett目录中的控制终端列表,来保证 root 用户不会从不安全的终端登录,它一般与auth验证类型一现使用。