鸟哥的linux私房菜学习笔记《二十八》PAM模块

  1. 简介
    1 . PAM (Pluggable AuthenticationModules, 嵌入式模块)
    PAM 可以说是一套应用程序接口 (Application Programming Interface, API),他提供了一连串的验证机制,只要使用者将验证阶段的需求告知 PAM 后, PAM 就能够回报使用者验证的结果 (成功或失败)。
    2 . 可以在写程序的时候将 PAM 模块的功能加入,就能够利用 PAM 的验证功能
    3 . PAM 用来进行验证的数据称为模块 (Modules),每个 PAM 模块的功能都不太相同。举例来说, 还记得我们在本章使用 passwd 指令时,如果随便输入字典上面找的到的字串,passwd 就会回报错误信息了!这是为什么呢?这就是 PAM 的 pam_cracklib.so 模块的功能!他能够判断该密码是否在字典里面! 并回报给密码修改程序,此时就能够了解你的密码强度了。
    4 . 所以,当你有任何需要判断是否在字典当中的密码字串时,就可以使用 pam_cracklib.so 这个模块来验证! 并根据验证的回报结果来撰写你的程序呢

  2. 语法
    当你执行 passwd 后,这支程序调用 PAM 的流
    程是:
    1 . 使用者开始执行 /usr/bin/passwd 这支程序,并输入密码;
    2 . passwd 调用 PAM 模块进行验证;
    3 . PAM 模块会到 /etc/pam.d/ 找寻与程序 (passwd) 同名的配置文件;
    4 . 依据 /etc/pam.d/passwd 内的设置,引用相关的 PAM 模块逐步进行验证分析;
    5 . 将验证结果 (成功、失败以及其他讯息) 回传给 passwd 这支程序;
    6 . passwd 这支程序会根据 PAM 回传的结果决定下一个动作 (重新输入新密码或者通过验
    证!)
    从上头的说明,我们会知道重点其实是 /etc/pam.d/ 里面的配置文件,以及配置文件所调用的PAM 模块进行的验证工作! 既然一直谈到 passwd 这个密码修改指令,那我们就来看看/etc/pam.d/passwd 这个配置文件的内容是怎样吧

    [root@CentOS kevin]# 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
    

    区分为三个字段:
    (1)第一个字段:验证类型(Type)(四种)
    auth:authentication(认证)
    account:account(账号)
    session:session(会话)
    password:password(密码)
    (2)第二个字段:验证的控制标准(control flag)
    required:成功或失败都会继续后面的流程
    requisite:验证失败则立刻回报失败标志,并终止后续的验证流程,验证成功则继续后续流程
    sufficient:验证成功回传成功标志,并终止后续流程,验证失败则继续后续流程
    optional:主要用于显示信息
    这里写图片描述

  3. 常用模块

    [root@CentOS kevin]# cat /etc/pam.d/login 
    
    #%PAM-1.0
    
    auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
    auth       include      system-auth
    account    required     pam_nologin.so
    account    include      system-auth
    password   include      system-auth
    
    # pam_selinux.so close should be the first session rule
    
    session    required     pam_selinux.so close
    session    required     pam_loginuid.so
    session    optional     pam_console.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      system-auth
    -session   optional     pam_ck_connector.so
    [root@CentOS kevin]# cat /etc/pam.d/system-auth
    
    #%PAM-1.0
    
    
    # This file is auto-generated.
    
    
    # User changes will be destroyed the next time authconfig is run.
    
    auth        required      pam_env.so
    auth        sufficient    pam_fprintd.so
    auth        sufficient    pam_unix.so nullok try_first_pass
    auth        requisite     pam_succeed_if.so uid >= 500 quiet
    auth        required      pam_deny.so
    
    account     required      pam_unix.so
    account     sufficient    pam_localuser.so
    account     sufficient    pam_succeed_if.so uid < 500 quiet
    account     required      pam_permit.so
    
    password    requisite     pam_cracklib.so try_first_pass retry=3 type=
    password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
    password    required      pam_deny.so
    
    session     optional      pam_keyinit.so revoke
    session     required      pam_limits.so
    session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
    session     required      pam_unix.so

    上面这个表格当中使用到非常多的 PAM 模块,每个模块的功能都不太相同,详细的模块情报可以在你的系统中找到:
    /etc/pam.d/*:每个程序个别的 PAM 配置文件;
    /lib64/security/*:PAM 模块文件的实际放置目录;
    /etc/security/*:其他 PAM 环境的配置文件;
    /usr/share/doc/pam-*/:详细的 PAM 说明文档。
    这里写图片描述
    这里写图片描述

  4. login的PAM验证机制流程:
    (1)验证阶段 (auth):首先,(a)会先经过 pam_securetty.so 判断,如果使用者是 root时,则会参考 /etc/securetty 的设置; 接下来(b)经过 pam_env.so 设置额外的环境变量;再(c)通过 pam_unix.so 检验密码,若通过则回报 login 程序;若不通过则(d)继续往下以 pam_succeed_if.so 判断 UID 是否大于 1000 ,若小于 1000则回报失败,否则再往下 (e)以 pam_deny.so 拒绝连线。
    (2)授权阶段 (account):(a)先以 pam_nologin.so 判断 /etc/nologin 是否存在,若存在则不许一般使用者登陆; (b)接下来以 pam_unix.so 及 pam_localuser.so 进行帐号管理,再以 (c) pam_succeed_if.so 判断 UID 是否小于 1000 ,若小于 1000 则不记录登录信息。(d)最后以 pam_permit.so 允许该帐号登陆。
    (3)密码阶段 (password):(a)先以 pam_pwquality.so 设置密码仅能尝试错误 3 次;(b)接下来以 pam_unix.so 通过 sha512, shadow 等功能进行密码检验,若通过则回报login 程序,若不通过则 (c)以 pam_deny.so 拒绝登陆。
    (4)会议阶段 (session):(a)先以 pam_selinux.so 暂时关闭 SELinux;(b)使用pam_limits.so 设置好使用者能够操作的系统资源; (c)登陆成功后开始记录相关信息在登录文件中; (d)以 pam_loginuid.so 规范不同的 UID 权限;(e)打开pam_selinux.so 的功能。
    总之,就是依据验证类别 (type) 来看,然后先由 login 的设置值去查阅,如果出现“ includesystem-auth ” 就转到 system-auth 文件中的相同类别,去取得额外的验证流程就是了。然后再到下一个验证类别,最终将所有的验证跑完! 就结束这次的 PAM 验证啦!
  5. 其他相关文件
    (1)除了前一小节谈到的 /etc/securetty 会影响到 root 可登陆的安全终端机, /etc/nologin 会影响到一般使用者是否能够登陆的功能之外,我们也知道 PAM 相关的配置文件在 /etc/pam.d ,说明文档在 /usr/share/doc/pam-(版本) ,模块实际在 /lib64/security/ 。那么还有没有相关的 PAM 文件呢? 是有的,主要都在 /etc/security 这个目录内!我们下面介绍几个可能会用到的配置文件喔!limits.conf我们在第十章谈到的 ulimit 功能中, 除了修改使用者的 ~/.bashrc 配置文件之外,其实系统管理员可以统一借由 PAM 来管理的! 那就是 /etc/security/limits.conf 这个文件的设置了。这个文件的设置很简单,你可以自行参考一下该文件内容。 我们这里仅作个简单的介绍:
    这里写图片描述
    (2)/var/log/secure, /var/log/messages
    如果发生任何无法登陆或者是产生一些你无法预期的错误时,由于 PAM 模块都会将数据记载在 /var/log/secure 当中,所以发生了问题请务必到该文件内去查询一下问题点!举例来说,我们在 limits.conf 的介绍内的范例二,就有谈到多重登陆的错误可以到 /var/log/secure 内查阅了! 这样你也就知道为何第二个 pro1 无法登陆啦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值