全部博文(191)
分类: LINUX
2009-06-30 16:47:46
PAM 的全名是插入式验证模块(Pluggable Authentication Moule ).是红帽系统中用来确认用户身份和决定用户可以做哪些工作的子系统。提供了很好的验证和授权的功能。
PAM利用各种模块来执行真正验证与授权的工作。
一:PAM的组成
1:pam的客户端
使用Pam功能的应用程序被称为 PAM 客户端;如:/etc/login 就是个PAM客户端。
2:PAM的内核
使用 /lib/libpam.so 这个共享链接库来实现
3:PAM的模块
/lib/security/* 下的所有模块来提供客户端的功能。
二:PAM 客户端服务文件
每一个PAM客户端一般有一个服务文件,必须存在于/etc/pam.d/中;如:login 这个PAM客户端就有一个login这个服务文件。目录对应关系: /bin/login应用程序ßà/etc/pam.d/login服务文件ßà/lib/security/模块.so
关系:
服务文件决定模块在什么时候如何被应用程序使用。
格式:
TYPE FLAG PATH [ARGS]…..
解释:
TYPE: 模块的类型
FLAG: 控制的类型
PATH: 模块的名称
ARGS: 参数
1:TYPE 字段
auth 验证用户身份,输入账户和密码;验证的确是这个用户。
account 授权用户;基于用户表,时间,密码的有效期来决定是否允许访问。
批准某个账户的使用。如:某个账户登录几次不成功则锁定该账户。
password 更新验证凭证,如:密码更新等;禁止用户尝试反复登录。
控制密码的修改
session 记录会话日志;限制用户登陆的次数。
2:FLAG 字段
控制值 |
该模块执行结果 |
动作 |
最终返回结果 |
required |
成功 |
继续执行下一个模块 |
看其他模块的结果 |
失败 |
失败 | ||
requisite |
成功 |
继续执行下个模块 |
看其他模块的结果 |
失败 |
stop |
失败 | |
sufficient |
成功 |
stop |
成功 |
失败 |
继续执行下一个模块 |
看其他模块的结果 | |
include |
成功 |
继续执行下一个模块 |
看其他模块的结果 |
失败 | |||
optional |
无关 |
执行指定的PAM用户端设置中相同的TYPE的模块 |
看其他模块的结果 |
required-------------必须通过,若失败继续测试下一个模块
requisite------------失败后停止测试
sufficient-----------通过则返回成功,失败则忽略测试,继续检查
optional------------通过与否无关
include--------------返回在被调用的文件中配置的测试的总体控制值
3:PATH字段:
默认执行模块完整路径: /lib/security
4:ARGS字段:
参数:可以从下面两个目录获取模块的参数已经改模块的用法。
/usr/share/doc/pam-VERSION/ 系统PAM文件
/usr/share/doc/pam-NAME_VERSION/ 这是第三方提供的模块文件目录
三:system-auth 配置文件
几乎所有的PAM客户端都会有这个配置文件,它是一个全局配置文件。
四:常用PAM模块
完整路径:/lib/security
1: pam_unix.so 模块
2: pam_deny.so 模块
3: pam_permit.so 模块
4: pam_rootok.so 模块 ####对管理员无条件允许通过
5: pam_cracklib.so 模块 ####相关配置文件/etc/security/system_auth
6: pam_limits.so 模块 ####相关配置文件 /etc/security/limits.conf
7: pam_tally.so 模块 ####相关配置文件/etc/pam.d/system_auth
8: pam_access.so 模块 ####相关配置文件 /etc/security/access.conf
9: pam_listfile.so 模块 #####相关配置文件:自己建立配置文件
*模块的使用方法参见:/usr/share/doc/pam-VERSION/txts/* 文档资料
五:常用模块分析
1: pam_access认证模块
所属类型:account
功能描述:该模块提供基于登录用户名、客户ip/主机名、网络号以及登录终端号的访问控制。缺省的,该模块的配置文件是/etc/security/access.conf,可以使用accessfile参数指定自定义的配置文件。
可带参数:accessfile=/path/to/file.conf
/etc/security/access.conf 格式:
权限 : 用户 : 来源
----权限字段: + 表示允许 - 表示禁止
---用户字段: 用户名,组名,多个值的时候,空格分开,ALL表示所有的
---来源字段: ALL表示任意主机,LOCAL表示本地主机,主机名,IP地址,
域名(以“.”开始);网络号(以“.”结束)。
EXCEPT操作符来表示除了…之外。
1.2 实例:
Pam客户端/bin/login ,即二进制文件login 是需要PAM模块来进行验证的。
查询某个应用程序是否应用PAM模块,使用ldd命令
如:查询login是否应用PAM模块,
ldd /bin/login |grep “libpam.so”
libpam.so.0 => /lib/libpam.so.0 (xxxxxxxx) ####表示需要PAM模块
编辑其相应的配置文件/etc/pam.d/login
加入:
account required /lib/security/pam_access.so
再编辑/etc/security/access.conf 文件
**** 只允许用户apple 访问本地系统,其他用户拒绝登陆本系统。
-:ALL EXCEPT apple:LOCAL
###当登录字符终端时候,只有apple可以进入,其他用户被拒绝了(root除外)。
2:pam_cracklib认证模块
2.1 所属类型:password
功能描述:该模块对用户密码提供强健性检测。比如密码长度、密码的复杂程度等等、
参数:
--debug:显示调试日志
--type=TEXT
--retry=N:修改密码时,出现错误的次数
--minlen=N:密码最少字符数
--dcredit=N:至少有N个数字
--ucredit=N:至少有N个大写字符
--lcredit=N:至少有N个小写字符
--ocredit=N:至少有N个其他字符
编辑/etc/pam.d/system-auth 对应服务文件/etc/pam.d/passwd
添加:
password requisite pam_cracklib.so retry=3 minlen=8 dcredit=1 ucredit=1 lcredit=1 ocredit=1 debug
3: pam_tally认证模块
3.1 所属类型:account
功能描述:当普通用户错误输入密码超过规定的值时候,就锁定用户。
参数:
Onerr=fail|succeed 能打开文件,这个决定了模块应该如何反应
Magic_root 表示如何这个模块是由一个uid=0的用户触发,那么计数器就不会增加
deny=N 尝试N次后,第N+1次将锁定该用户
lock_time=N 锁定时间为N秒
ulock_time=N 解锁N秒之后,超时N秒之后将再次锁定,将由管理员来解锁
per_user
no_lock_time /var/log/faillog 日志里不记录尝试失败的次数
no_reset 成功登入后不记录次数
audit 如果用户找不到,就把用户记录进入系统日志
silent 静默模式,不打印信息
no_log_info 不记录日志
编辑/etc/pam.d/system_auth
添加:
account required pam_tally.so deny=3 ####用户第四次输入错误将被系统锁定
4:pam_limits认证模块
4.1 所属类型:account
功能描述:限制用户使用系统的资源。
配置文件:/etc/security/limits.conf
添加:
apple hard maxlogin 2
表示用户apple使用两个虚拟终端登入系统,使用第三个的时候,将被系统拒绝
5:pam_listfile认证模块
5.1 所属类型:auth
功能描述:拒绝或允许用户登陆远程系统;pam_listfile模块会确认要求登录的用户账号与允许的账号名单是否冲突,必须建立一个允许登录或者拒绝登录的名单。
列如:auth required pam_listfile item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
配置文件:自定义配置文件
实例:拒绝用户apple 远程登录系统
在服务文件/etc/pam.d/sshd 添加如下:
auth required pam_listfile.so item=user sense=deny file=/etc/denyuser onerr=secceed
创建,编辑文件/etc/denyuser
echo “apple” > /etc/denyuser
说明:apple将不能ssh远程登入系统
6: pam_nologin认证模块
描述:pam_nologin模块会确认/etc/nologin文件是否存在,如果存在,普通用户则会验证失败,只允许root用户登录
7: pam_security认证模块
描述:pam_security模块只会对root有影响。当root账户登录时,pam_security会参考/etc/securetty目录中的console列表,以决定root是否可以登录,避免用户从不安全的终端登录
***********************未完***************************