Linux学习——小白看PAM认证

pam认证机制

  • 是一种与认证相关的通用框架机制,但是自身不做认证
  • 它同时面向验证服务的开发者和被验证服务者:淘宝、商家、买家
    • 应用程序开发者通过 在服务程序中使用PAM API来实现对认证方法的调用;而PAM服 务模块的开发者则利用PAM SPI来编写模块供 PAM接口库调用,将不同的认证机制加入到系统中;PAM接口库则 读取配置文件,将应用程序和相应的PAM服务模块联系起来
  • 系统管理员可以灵活的根据需要给不同的服务配置不同的认证方式而无需更改服务程序
    • 修改服务的配置文件来修改认证方式

PAM相关文件

  • 模块文件目录:/lib64/security/*.so
  • 模块的配置文件:/etc/security/,该目录下存放/lib64/security/下复杂模块的子配置文件
  • 主(专门的)配置文件:/etc/pam.conf,默认不存在
  • 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME,/etc/pam.d/下的应用程序通过对应的/etc/pam.d/APP_NAME配置文件来调用功能模块
  • 调用模块需要的工作参数如果简单就放在/etc/pam.d./下的配置文件中,复杂就放在/lib64/security/下
  • 注意:如/etc/pam.d存在,/etc/pam.conf将失效

PAM认证原理

  1. PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于 /etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
  2. 过程,以执行passwd程序为例
  • 使用者执行/usr/bin/passwd 程序,并输入密码
  • passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关配置文 件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会 搜寻/etc/pam.d/passwd此设置文件
  • 经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进 行验证
  • 将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的 结果决定下一个动作(重新输入密码或者通过验证)

PAM文件格式

  1. 通用配置文件格式/etc/pam.conf,太大,内容太多,不用
  2. 专用配置文件格式/etc/pam.d/*,分四个类型
  • type
    • Auth 账号的认证和授权
    • Account 与账号管理相关的非认证类的功能,如:用来限制/允许用户对某 个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用 户的位置(例如:root用户只能从控制台登录)
    • Password 用户修改密码时密码复杂度检查机制等功能
    • Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作, 如:记录打开/关闭数据的信息,监视目录等
    • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是 安装在系统上的模块有用
  • control,PAM库如何处理与该服务相关的PAM模块成功或失败情况
    • 分两种方式:简单、复杂
    • 简单方式实现,用一个关键字实现
      • required:一票否决,表示本模块必须返回成功才能通过认证,但是如果该 模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕再将失败结果返回给应用程序
      • requisite:一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返 回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序
      • sufficient:一票通过,BOSS发话好使,表明本模块返回成功则通过身份认证的要求,不必再执 行同一type内的其它模块,但如果本模块返回失败可忽略
      • opitional:可选可不选,返回值一般对最终结果没影响
      • include:可以调用其他的配置文件中定义的配置信息
    • 复杂详细实现,一般不用
  • modules-path
    • 相对路径:
      • /lib64/security目录下的模块可使用相对路径,如:pam_shells.so、 pam_limits.so
    • 绝对路径:
      • 模块通过读取配置文件完成用户对系统资源的使用控制,/etc/security/*.conf
    • 注意:修改PAM配置文件将马上生效
    • 建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误
  • arguments,用来传递给该模块的参数 
  • Linux学习——小白看PAM认证_第1张图片

PAM文档说明

  • /user/share/doc/pam-*/txts/*
  • rpm -qd pam查看pam的man文件
  • man modules-name,man rootok

常用的PAM模块

pam_shells.so

  1. 模块:pam_shells
  2. 功能:检查有效shell
  3. man pam_shells
  4. 示例:模拟非shell类型的用户无法登录
/* 原本的shell类型内容 */
    cat /etc/shells
/* 修改登录程序的配置文件 */
    vim /etc/pam.d/login
/* 添加auth required pam_shells.so */
/* 将一名系统用户的登录类型设为/bin/csh */
    usermod/chsh -s /bin/csh huang
/* 但是使用su命令可以用huang登录,同理修改su的配置文件*/
    vim /etc/pam.d/su
    auth required pam_shells.so 
  • 使用huang用户将无法登录  

Linux学习——小白看PAM认证_第2张图片

pam_securetty.so

  1. 功能:只允许root用户在/etc/securetty列出的安全终端上登陆
  2. 示例:允许root在telnet登陆
  • 可以以在/etc/securetty中添加talnet的登录终端
  • 或是在/etc/pam.d/remote中删除auth required pam_securetty.so

pam_nologin.so

  1. 功能
  • 如果/etc/nologin文件存在,将导致非root用户不能登陆
  • 如果用户shell类型是/sbin/nologin时,当该用户登陆时,会显示**/etc/nologin文件内容**,并拒绝登陆,维护时使用

pam_limits.so

  1. 功能:在用户级别实现对其可用资源的控制,比如可打开的文件数量、可运行的进程数量、可用内存
  2. 修改限制
  • 使用ulimit命令,立即生效但不永久
    • -n,最大能打开的文件个数
    • -u,最大的用户进程数
    • -S,使用软资源限制
    • -H,硬资源限制
  • 写到文件中中永久保存
    • /etc/security/limits.conf,总配置文件
    • /etc/security/limits.d/*.conf,分成子配置来修改
    • domain type item value
    • 指定用户 限制类型 限制的资源 具体数值
      • huang - nproc 8

总结的不深,希望刚接触这些的人有所帮助。

你可能感兴趣的:(练习笔记,Linux,PAM)