PAM认证机制

一、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

  1. [root@newhostname 1372]# cat /etc/pam.d/passwd
  2. #%PAM-1.0
  3. auth include system-auth
  4. account include system-auth
  5. password substack system-auth
  6. -password optional pam_gnome_keyring.so use_authtok
  7. password substack postlogin
  8. [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列出的安全终端上登陆

例:

  1. 允许root在telnet登陆
  2. 方法一:
  3. [root@newhostname 1372]# vim /etc/pam.d/remote
  4. #%PAM-1.0
  5. auth required pam_securetty.so
  6. auth substack password-auth
  7. auth include postlogin
  8. account required pam_nologin.so
  9. account include password-auth
  10. password include password-auth
  11. # pam_selinux.so close should be the first session rule
  12. session required pam_selinux.so close
  13. session required pam_loginuid.so
  14. # pam_selinux.so open should only be followed by sessions to be executed in the user context
  15. session required pam_selinux.so open
  16. session required pam_namespace.so
  17. session optional pam_keyinit.so force revoke
  18. session include password-auth
  19. session include postlogin
  20. 注释auth required pam_securetty.so这一行
  21. 方法二:
  22. [root@newhostname 1372]# vim /etc/securetty
  23. 添加
  24. pts/0
  25. pts/1
  26. pts/2
  27. pts/3
  28. .
  29. .
  30. .
  31. pts/9
  32. 第一种修改方法是直接通过禁用该模块实现的
  33. 第二种方法则是修改pam的规则来实现的
  34. 关于如何获取修改pam模块的规则的方法,可以通过 man 模块名来获得

2、模块:pam_shells

功能:检查有效shell

例:

  1. 不允许使用/bin/csh的用户本地登录
  2. [root@newhostname 1372]# vim /etc/shells
  3. /bin/sh
  4. /bin/bash
  5. /sbin/nologin
  6. /usr/bin/sh
  7. /usr/bin/bash
  8. /usr/sbin/nologin
  9. /bin/tcsh
  10. /bin/csh
  11. 去掉 /bin/csh
  12. useradd –s /bin/csh testuser
  13. 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

  1. 限制用户最多打开的文件数和运行进程数
  2. 查看 /etc/pam.d/system-auth内是否存在“session required pam_limits.so”
  3. vim /etc/security/limits.conf
  4. * soft nofile 102400
  5. * hard nofile 102400
  6. * soft nproc 40960
  7. * hard nproc 40960
  8. 设置所有人最大打开的进程数为40960
  9. 设置虽有人最大打开的文件数为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》

 

posted @ 2018-02-28 22:05  莫孟林  阅读(2815)  评论(0编辑  收藏  举报