PAM(pluggable authentication module)用户认证

本文深入解析了Linux系统中PAM(可插拔认证模块)的工作原理及配置方法,包括认证流程、模块类型、控制标志及常见模块的功能介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PAM(pluggable authentication module)用户认证
linux大多的认证服务都是由PAM来完成的,对于服务器的程序如sendmail也是如此,当用户向服务器发起登陆请求时,sendmail服务器会将该请求转发给PAM模块(libpam.so),但真正处理这些请求的也不是这个PAM,而是它将调用一系列更多的别的PAM模块来处理。而具体调用哪些模块是由该请求类型的服务配置文件决定的,服务配置文件都在/etc/pam.d/下面,一个认证服务对应一个文件,服务文件格式如下:
module-type control-flag module-path arguments
其中上面几项都有几个选项,
module-type: auth account session password
control-flag:  required requisite sufficient optional
具体一个模块需要使用那种模块类型是由模块本身决定的,不同的模块使用不同的类型。
对于control-flag,required表示这个模块必须通过,如无法通过,将强行退出;requisite表示也是必须通过,但允许失败,系统允许还可等后面的服务通过,如果后面有一个sufficient模块通过,那也可算是认证通过;而sufficient 是只要这个通过,以后都不对用户进行任何认证了;optional则是这个模块认证通不通的过无所谓,总算成通过的。例子如下:
auth  required pam_securetty.so
auth  required pam_stack.so service=system-auth
常用的PAM认证模块:
pam_access.so 控制访问者地址与帐号名称
pam_listfile.so 控制访问者的帐号名称和登陆位置
pam_limits.so  控制为用户分配的资源
pam_rootok.so 对管理员(uid=0)无条件允许通过
pam_userdb.so 设定独立用户帐号数据库认证
模块对应在系统中有说明文件,放在/usr/share/doc/pam-版本号/txt/下面,我机上的是
[root@server root]# cd /usr/share/doc/pam-0.75/txts/
[root@server txts]# ls
pam_appl.txt         README.pam_ftp        README.pam_shells
pam_modules.txt      README.pam_limits     README.pam_stack
pam.txt              README.pam_listfile   README.pam_stress
README               README.pam_localuser  README.pam_tally
README.pam_access    README.pam_mail       README.pam_time
README.pam_chroot    README.pam_nologin    README.pam_timestamp
README.pam_console   README.pam_permit     README.pam_unix
README.pam_cracklib  README.pam_pwdb       README.pam_userdb
README.pam_deny      README.pam_rhosts     README.pam_warn
README.pam_env       README.pam_rootok     README.pam_wheel
README.pam_filter    README.pam_securetty  README.pam_xauth
一个模块说明对应一个README。
看一下一些常用的认证应用程序,如login,就看/etc/pam.d/login,
#%PAM-1.0
auth       required     pam_securetty.so
auth       required     pam_stack.so service=system-auth
auth       required     pam_nologin.so
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth
session    optional     pam_console.so
前面三行是认证,其中第一个是使用pam_securetty.so来查看终端是否安全,可以查看上面的readme来看一下这个模块里面在干些什么,
pam_securetty:
        Allows root logins only if the user is logging in on a
        "secure" tty, as defined by the listing in /etc/securetty
 
        Also checks to make sure that /etc/securetty is a plain
        file and not world writable.
它说如果登陆安全终端只能让root登陆,安全终端在/etc/securetty中定义,还要检查这个文件是个普通文件,并且是全局不可写。这个模块通过了,然后是pam_stack.so,这个模块又调用子模块system-auth,同样看一下其中写了些什么,
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      /lib/security/$ISA/pam_env.so
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
auth        required      /lib/security/$ISA/pam_deny.so
                                                                               
account     required      /lib/security/$ISA/pam_unix.so
                                                                               
password    required      /lib/security/$ISA/pam_cracklib.so retry=3 type=
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5
shadow
password    required      /lib/security/$ISA/pam_deny.so
                                                                               
session     required      /lib/security/$ISA/pam_limits.so
session     required      /lib/security/$ISA/pam_unix.so
这里涉及认证堆栈的概念,当系统在验证每个模块是否通过认证时,会将认证结果按顺序丢进堆栈里,而这里当pam_stack.so模块调用子模块systm-auth时,子模块又启用它自己的堆栈,认证后将结果返回父模块。这里system-auth先认证环境设置,然后是用pam_unix.so对用户名和密码进行认证,假若通过就足够了,不继续认证了,因为它是suffcient的认证方式,而如若未通过,则遇到pam_deny.so模块,这个模块是遇到任何用户都拒绝登陆的模块。再
回到login,下一个模块是pam_nologin.so,再看一下帮助文档,
# $Id: README,v 1.1.1.1 2000/06/20 22:11:46 agmorgan Exp $
#
 
This module always lets root in; it lets other users in only if the file
/etc/nologin doesn't exist.  In any case, if /etc/nologin exists, it's
contents are displayed to the user.
它说这个模块只让root登陆,在/etc/nologin文件不存在的情况下才允许别的用户登陆,如果文件存在,该文件内容还会显示给用户看。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值