一、PAM简介
Sun公司1995年开发的一种与认证相关的通用框架机制,PAM只关注如何为服务验证用户的API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开;PAM只是一个框架而已,自身不做认证。
它提供了对所有服务进行认证的中央机制,适用于login\telnet\rlogin\fsh\ftp\pp\su等应用程序中。
PAM-API 调用认证接口
PAM-SPI 提供认证接口
对应的文件名:pam_xxxx()
PAM认证一般遵循这样的顺序:Service->PAM(配置文件)->pam_*.so,这就是调用机制
二、配置PAM
PAM的目录:
/lib64/security/pam* 全是pam模块
/etc/security/ pam模块的配置文件
/etc/pam.conf pam主配置文件,默认不存在(不推荐使用)
/etc/pam.d/ pam子配置文件,推荐使用
我们查看/etc/pam.d/passwd
- [root@newhostname 1372]# cat /etc/pam.d/passwd
- #%PAM-1.0
- auth include system-auth
- account include system-auth
- password substack system-auth
- -password optional pam_gnome_keyring.so use_authtok
- password substack postlogin
- [root@newhostname 1372]#
pam.conf文件格式
1)、第一列为type包括一下项目:
session
auth 只负责账户的认证和授权
account 负责账户相关,但是是认证之后的
password 负责用户修改口令时,口令复杂度检查
-type 表示因为缺失二不能加载的模块将不记录在日志内:例-password -session
pam.conf内,每一行,都要经过一次认证
2)、第二列为control,用来表示如何控制,一般都是简单实现,即一个关机自
required 表示一票否决制,本模块必须返回成功才能通过认证,但如果失败,继续检查,但总体结果已经失败了。
requisite 表示一票否决,它和required不同的地方是,不会继续向下认证,直接返回失败。
optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
include: 调用其他的配置文件中定义的配置信息
sufficient:一票通过
3)、第三列为模块名
具体路径的引用由主配置文件/etc/pam.conf 中定义
三、PAM模块示例
1、模块:pam_securetty.so
功能:只允许root用户在/etc/securetty列出的安全终端上登陆
例:
- 允许root在telnet登陆
- 方法一:
- [root@newhostname 1372]# vim /etc/pam.d/remote
- #%PAM-1.0
- auth required pam_securetty.so
- auth substack password-auth
- auth include postlogin
- account required pam_nologin.so
- account include password-auth
- password include password-auth
- # pam_selinux.so close should be the first session rule
- session required pam_selinux.so close
- session required pam_loginuid.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 required pam_namespace.so
- session optional pam_keyinit.so force revoke
- session include password-auth
- session include postlogin
- 注释auth required pam_securetty.so这一行
- 方法二:
- [root@newhostname 1372]# vim /etc/securetty
- 添加
- pts/0
- pts/1
- pts/2
- pts/3
- .
- .
- .
- pts/9
- 第一种修改方法是直接通过禁用该模块实现的
- 第二种方法则是修改pam的规则来实现的
- 关于如何获取修改pam模块的规则的方法,可以通过 man 模块名来获得
2、模块:pam_shells
功能:检查有效shell
例:
- 不允许使用/bin/csh的用户本地登录
- [root@newhostname 1372]# vim /etc/shells
- /bin/sh
- /bin/bash
- /sbin/nologin
- /usr/bin/sh
- /usr/bin/bash
- /usr/sbin/nologin
- /bin/tcsh
- /bin/csh
- 去掉 /bin/csh
- useradd –s /bin/csh testuser
- testuser将不可登录
3、模块:pam_nologin.so
功能:
如果/etc/nologin文件存在,将导致非root用户不能登陆
如果用户shell是/sbin/nologin 时,当该用户登陆时,会显示
/etc/nologin.txt文件内容,并拒绝登陆
4、模块:pam_limits.so
功能:在用户级别实现对其可使用的资源的限制,例如:可打
开的文件数量,可运行的进程数量,可用内存空间
修改限制的实现方式:
(1) ulimit命令,立即生效,但无法保存
-n 最多的打开的文件描述符个数
-u 最大用户进程数
-S 使用 soft(软)资源限制
-H 使用 hard(硬)资源限制
(2) 配置文件:/etc/security/limits.conf,
/etc/security/limits.d/*.conf
配置文件:每行一个定义;
<domain> <type> <item> <value>
<domain> 应用于哪些对象
Username 单个用户
@group 组内所有用户
* 所有用户
<type> 限制的类型
Soft 软限制,普通用户自己可以修改
Hard 硬限制,由root用户设定,且通过kernel强制生效
– 二者同时限定
<item> 限制的资源
nofile 所能够同时打开的最大文件数量,默认为1024
nproc 所能够同时运行的进程的最大数量,默认为1024
<value> 指定具体值
示例:pam_limits.so
- 限制用户最多打开的文件数和运行进程数
- 查看 /etc/pam.d/system-auth内是否存在“session required pam_limits.so”
- vim /etc/security/limits.conf
- * soft nofile 102400
- * hard nofile 102400
- * soft nproc 40960
- * hard nproc 40960
- 设置所有人最大打开的进程数为40960
- 设置虽有人最大打开的文件数为102400
四、总结
我们只是pam模块的使用户,不是开发者,每个模块的用法各不相同,所以我们要知道如何去寻找pam模块的帮助,我们可以通过man来查询模块的用法,这个是最快的途径,或者在官网上下载pam模块的文档也是一个不错的选择。
pam文档说明
/user/share/doc/pam-*
rpm -qd pam
man –k pam_模块名
man 模块名 如man rootok
pam模块手册《The Linux-PAM System Administrators’ Guide》