pam config
Contents
pam config
pam模块文件内容看,可以将pam配置文件分为四列,
第一列代表模块类型
第二列代表控制标记
第三列代表模块路径
第四列代表模块参数
Module_type 将为 Service_name 字段中的相应服务指定模块类型 (auth/account/session/passwd) 。
Control_flag 将指定模块的堆栈行为。它可以获取诸如 requisite、required、sufficient 和 optional 之类的值。
Module_path 将指定实现模块的库对象的路径名称。默认情况下,它将被设为 /lib/security。
Module_options/module_args (可选字段) 将指定可以传递给服务模块的选项或实参。
PAM模块接口(模块管理组)
PAM为认证任务提供四种类型可用的模块接口,它们分别提供不同的认证服务:
auth 表示鉴别类接口模块类型用于检查用户和密码,并分配权限;
这种类型的模块为用户验证提供两方面服务。让应用程序提示用户输入密码或者其他标记,确认用户合法性;通过他的凭证许可权限,设定组成员关系或者其他优先权。
account 表示账户类接口,主要负责账户合法性检查,确认帐号是否过期,是否有权限登录系统等;
这种模块执行的是基于非验证的帐号管理。他主要用于限制/允许用户对某个服务的访问时间,当前有效的系统资源 (最多可以多少用户) ,限制用户位置 (例如: root只能通过控制台登录) 。
多数情况下auth和account会一起用来对用户登录和使用服务的情况进行限制。这样的限制会更加完整。比如下面是一个具体的例子: login是一个应用程序。Login要完成两件工作——首先查询用户,然后为用户提供所需的服务,例如提供一个shell程序。通常Login要求用户输入名称和密码进行验证。当用户名输入的时候,系统自然会去比对该用户是否是一个合法用户,是否在存在于本地或者远程的用户数据库中。如果该账号确实存在,那么是否过期。这些个工作是由account接口来负责。
如果用户满足上述登录的前提条件,那么它是否具有可登录系统的口令,口令是否过期等。这个工作就要由auth接口来负责了,他通常会将用户口令信息加密并提供给本地 (/etc/shadow) 或者远程的(ldap,kerberos等)口令验证方式进行验证。
如果用户能够登录成功,证明auth和account的工作已经完成。但整个验证过程并没有完全结束。因为还有一些其他的问题没有得到确认。例如,用户能够在服务器上同时开启多少个窗口登录,用户可以在登录之后使用多少终端多长时间,用户能够访问哪些资源和不能访问哪些资源等等。也就是说登录之后的后续验证和环境定义等还需要其他的接口。这就是我们下面要提到的两组接口:
password 口令类接口。控制用户更改密码的全过程。也就是有些资料所说的升级用户验证标记。
session - 会话类接口。实现从用户登录成功到退出的会话控制;处理为用户提供服务之前/后需要做的些事情。包括: 开启/关闭交换数据的信息,监视目录等,设置用户会话环境等。也就是说这是在系统正式进行服务提供之前的最后一道关口。
单个PAM库模块可以提供给任何或所有模块接口使用。例如,pam_unix.so提供给四个模块接口使用。
auth required pam_env.so //登录后的环境变量。
auth sufficient pam_fprintd.so //指纹认证。
auth sufficient pam_unix.so nullok try_first_pass //验证用户密码的有效性。如果使用nullok参数,用户不输入密码就可以获得系统提供的服务。同时,也允许用户密码为空时更改用户密码。try_first_pass尝试在提示用户输入密码前,使用前面一个堆叠的auth模块提供的密码认证用户。
auth requisite pam_succeed_if.so uid >= 500 quiet //允许uid大于500的用户在通过密码验证的情况下登录。
auth required pam_deny.so //对所有不满足上述任意条件的登录请求直接拒绝。
account required pam_unix.so //主要执行建立用户帐号和密码状态的任务,然后执行提示用户修改密码,用户采用新密码后才提供服务之类的任务。
account sufficient pam_localuser.so //要求将用户列于 /etc/passwd 中。
account sufficient pam_succeed_if.so uid < 500 quiet //对用户的登录条件做一些限制,表示允许uid大于500的用户在通过密码验证的情况下登录。
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3type= //对用户密码提供强健性检测。
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok //让用户更改密码的任务。
password required pam_deny.so //对所有不满足上述任意条件的登录请求直接拒绝。
session optional pam_keyinit.so revoke //表示当用户登录的时候为其建立相应的密钥环,并在用户登出的时候予以撤销。optional表示即便该行所涉及的模块验证失败用户仍能通过认证
session required pam_limits.so //限制用户登录时的会话连接资源,相关pam_limit.so配置文件是/etc/security/limits.conf,默认情况下对每个登录用户都没有限制。
session [success=1 default=ignore]pam_succeed_if.so service in crond quiet use_uid //success=1时执行本行。default=ignore用来设置上面的返回值是无法达的行为时,那么这个模块的返回值将被忽略,不会被应用程序知道。对用户的登录条件做一些限制
session required pam_unix.so //记录用户名和服务名到日志文件的工作,只不过最后返回错误
Control_flag 值包括:
required 堆栈中的所有 Required 模块必须看作一个成功的结果。如果一个或多个 Required 模块失败,则实现堆栈中的所有 Required 模块,但是将返回第一个错误。
sufficient 如果标记为 sufficient 的模块成功并且先前没有 Required 或 sufficient 模块失败,则忽略堆栈中的所有其余模块并返回成功。
requisite表示执行错误则立即返回
Optional: 如果堆栈中没有一个模块是 required 并且没有任何一个 sufficient 模块成功,则服务/应用程序至少要有一个 optional 模块成功。
nclude - 与其他控制标志不同,include与模块结果的处理方式无关。该标志用于直接引用其他PAM模块的配置参数
pam 主要模块
pam_access 将使用登录名/域名,根据 /etc/security/access.conf 中的预定义规则交付日志守护进程样式的登录访问控制。
pam_cracklib 将根据密码规则检查密码。
pam_env sets/unsets 环境变量来自 /etc/security/pam_env_conf。
pam_debug 将调试 PAM。
pam_deny 将拒绝 PAM 模块,仅返回错误并防止发生任何类型的连接或验证。
pam_echo 将打印消息。
pam_exec 将执行外部命令。
pam_ftp 是匿名访问模块。
pam_localuser 要求将用户列于 /etc/passwd 中。
pam_unix 将通过 /etc/passwd 提供传统密码验证。
pam_warn.so 来记录关于正在进行的尝试的信息。
所有的PAM配置方法都在man手册中有说明,比如要查找某个程序支持PAM模块的配置,可以使用man 加模块名(去掉.so)查找说明,如# man pam_unix。(模块名可以在目录/lib/security/或/lib64/security/中找到。)
https://blog.csdn.net/jeny8221/article/details/73876066?utm_source=copy
Author -
LastMod 2018-10-08