zoukankan      html  css  js  c++  java
  • PAM认证机制

    一、PAM简介

    Sun公司1995年开发的一种与认证相关的通用框架机制,PAM只关注如何为服务验证用户的API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开;PAM只是一个框架而已,自身不做认证。

    它提供了对所有服务进行认证的中央机制,适用于login elnet loginfshftpppsu等应用程序中。

    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》

  • 相关阅读:
    HDU4628+状态压缩DP
    Javascript 去掉字符串前后空格的五种方法
    Javascript 数组之判断取值和数组取值
    ASP.NET MVC 出现错误 “The view 'XXX' or its master was not found or no view engine support”
    ASP.NET MVC 页面调整并传递参数
    ASP.NET MV3 部署网站 报"Could not load file or assembly ' System.Web.Helpers “ 错的解决方法
    ASP.NET MVC 控制器向View传值的三种方法
    CSharp 如何通过拼接XML调用存储过程来查询数据
    SQLServer : EXEC和sp_executesql的区别
    关于SQLServer2005的学习笔记—异常捕获及处理
  • 原文地址:https://www.cnblogs.com/momenglin/p/8486069.html
Copyright © 2011-2022 走看看