大家好,关于PAM的使用,有的接触不到,他们配置的地方也不是经常出现,这是我的学习笔记,想分享给大家,有些地方逻辑性很强需要多看我基本上都有注释。


PAM 身份验证    及插即用   验证   模块

[root@xu /]# ldd /usr/sbin/sshd --------查看一个程序在运行的时调用那些库文件

[root@xu /]# ldd `which sshd` | grep pam

       libpam.so.0 => /lib/libpam.so.0 (0x008ae000)


[root@xu /]# ls /lib/security/------pam所有功能插件


[root@xu /]# ls /etc/pam.d/-------一个程序使用什么pam模块  怎么使用都在这里


[root@xu /]# firefox /usr/share/doc/pam-0.99.6.2/html/Linux-PAM_SAG.html  -----pam的配置手册

6.11 是用方法

6.25 是限制 描述

6.6  设置环境变量

-----------------------------

以login 为例子  怎么用的pam


pam 的难点  前俩列的关系

一个用户能不能验证成公 能不能登录进去 取决于前俩个   (auth account )


日志信息

tail -f /var/log/secure




第一列


auth ----   管理用户名密码

account ---- 除用户名密码以外的对登录起取决性的其他因素条件(列如  某个时间断 某个网段)

password ----当用户对密码进行操作的时候用到他  (不该密码就没他什么事情)

session-------  进行会话的时候用到的 (当我打开一个程序的时候相当于建立了一次连接会话)



第二列


required ------ 必要条件    针对模块(模一个条件必须要成功,如果失败了 还继续往下执行,但是最终百分之百失败)

requisite-----  必要条件    针对模块(模块必须验证成功 如果失败了 ,停止验证      如果成功 继续走,看以后的   )

sufficient----- 充分条件    针对模快(如果一个模块成功 立即返回成功 如果失败 (忽略不计对最终结果不受影响))

otional--- -     可选条件     针对模块 (不管模块验证成功 失败  对最终结果没有影响)

include-------包含条件      针对文件( 不同模块调用相同的条件 把条件作一个公共文件)  跳过来之后只读相同类型的      


-------------------------------------------

[root@xu ~]# cat /etc/shadow | grep user1

user1:!$1$hSYfRFbq$ST2mHoyu38nnvPx/kDMv90:15781:0:99999:7:::


auth  管的是前俩列

account 管的是 后面的

-----------------------------------------


第三行 模快   (第三行没有跳转的就是模块在手册里查是什么功能 如果跳转了就去看跳转的那个公共文件里对应的模块是什么功能)


login 配置文件里的模块

pam_securetty.so  安全的tty模块 -------对应的配置文件vim /etc/securetty     只有这里的终端 才是安全的终端

pam_nologin.so 阻止非管理员登录的模块  --- touch /etc/nologin     文件  所有普通帐号就不能登录

pam_access.so  访问控制模块

pam_time.so  时间控制模块

pam_echo.so   打印文本信息




auth 跳转文件里的模块

pam_env.so  设置环境变量模块  -------对应的配置文件 vim /etc/security/pam_env.conf   在这里设置环境变量

pam_unix.so 验证用户名密码模块 --pam核心模块负责passwd 找用户名  在shadow 里找密码的模块,在这里他验证的是前面的两行

pam_succeed_if.so  uid >= 500 quiet(安静模式 不记录到日志)     判断是否成功的模块     判断uid 是否大于等于500

pam_deny.so   永远拒绝模块  


account 跳转文件里的模块

pam_unix.so   验证用户名密码模块  ------这里他验证的是后面的

pam_permit.so    永远允许的模块



-------------------------------------------


login 的pam配置文件

[root@xu /]# vim /etc/pam.d/login


 1 #%PAM-1.0

 未知用户忽略

 2 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securett(模块)  y.so--以前的语法  必要条件

 

 第一行只针对管理员模块 只针对管理员生效  模块不会验证普通用户vim /etc/securetty----只有这里的终端 才是安全的终端

 3 auth       include      system-auth(公共文件)  跳转 vim /etc/pam.d/system-auth  里对应的配置

 4 account    required     pam_nologin.so   必要条件  这个模块让你找  touch /etc/nologin  文件 所有普通帐号不能登

 5 account    include      system-auth   继续跳转 vim /etc/pam.d/system-auth 里caaount对应的文件


 6 password   include      system-auth

 7 # pam_selinux.so close should be the first session rule

 8 session    required     pam_selinux.so close

 9 session    optional     pam_keyinit.so force revoke

10 session    required     pam_loginuid.so

11 session    include      system-auth

12 session    optional     pam_console.so

13 # pam_selinux.so open should only be followed by sessions to be executed in     the user context

14 session    required     pam_selinux.so open



----------------------------



[root@xu ~]# vim /etc/pam.d/system-auth

 1 #%PAM-1.0

 2 # This file is auto-generated.

 3 # User changes will be destroyed the next time authconfig is run.

 4 auth        required      pam_env.so  --------环境变量

 5 auth        sufficient    pam_unix.so nullok try_first_pass   -pam_nologin.so-第一次输入密码以后  往后第二次在验证他会尝试输入第一次的密码

 6 auth        requisite     pam_succeed_if.so uid >= 500 quiet  安静

 7 auth        required      pam_deny.so  拒绝模块

 8

 9 account     required      pam_unix.so  --------只管 shadow 的前俩列  

10 account     sufficient    pam_succeed_if.so uid < 500 quiet

11 account     required      pam_permit.so

12

13 password    requisite     pam_cracklib.so try_first_pass retry=3

14 password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_a    uthtok

15 password    required      pam_deny.so

16

17 session     optional      pam_keyinit.so revoke

18 session     required      pam_limits.so

19 session     [success=1 default=ignore] pam_succeed_if.so service in crond qu    iet use_uid

20 session     required      pam_unix.so




--------------------------

用户不需要密码

[root@xu /]#  vim /etc/pam.d/login

 设置用户名密码  如果成功直接通过    这个模块

2 auth sufficient pam_permit.so

7account   sufficient   pam_permit.so


---------------------------------

pam_access.so  访问控制模块


每个模块最后有这个提示

6.1.4. MODULE SERVICES PROVIDED

All services are supported.   ---------旨的是auth   account   passwd session这里面都支持这个模块


vim /etc/pam.d/login

4 auth  requisite  pam_access.so


+代表 授权访问    -代表拒绝访问


vim /etc/security/access.conf

-: user1 : tty3

-: all : 192.168.1.0


----------------

pam_time.so  时间控制模块


vim /etc/pam.d/login

9 account  required  pam_time.so


格式

services;ttys;users;times

[root@xu /]# vim /etc/security/time.conf

login ; tty3 ; user1 ; al0100-0200   user1      1点到两点才能登录

login ; tty3 ; user1 ; all

sshd ; * ;  *  ;  al0100-0200

------------

pam_echo.so   打印文本信息


[root@xu ~]# cat >  hello.txt <<EOF

> eeeeeeeeeeeee

> EOF




vim /etc/pam.d/login

4 auth optional  pam_echo.so file=/root/hello.txt


-------------------------

注意    顺序问题  优先第一个起作用

 模块是否支持

 前两类的关系