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》

  • 相关阅读:
    条款29:为“异常安全”而努力是值得的
    条款20.宁以pass-by-reference-to-const替换pass-by-vlaue
    对引用要注意
    基因组拼接中常见的名词解释
    序列联配(alignment)和数据库搜索方法简介
    几个重要生物信息中心及其数据库服务
    复杂分析-多序列比对相关
    大规模基因组测序中的信息分析 -- 拼接与注释
    生物信息学 第一课 什么是生物信息学
    zookeeper windows7下集群搭建
  • 原文地址:https://www.cnblogs.com/momenglin/p/8486069.html
Copyright © 2011-2022 走看看