Linux-PAM 简介


      linux下PAM模块全称是Pluggable Authentication Module for linux(可插入式授权管理模块),该模块被用来管理LINUX系统下应用、服务等的授权,如login,su等。

  1.   PAM的配置文件位置 /etc/pam.conf,也可以在/etc/pam.d/文件夹下配置单独的文件,当存在/etc/pam.d文件夹时,Linux-PAM将会使用/etc/pam.d文件夹下的配置文件而忽略/etc/pam.conf配置文                   
    1.    pam.conf配置文件中,配置内容写在一行内,也可以以"\"作为连接符将配置内容写在多行;pam.conf以空格作为分割标记,#代表标注信息;“-”如果在配置语句前面加上该符号,在系统登录时如果该模块未被正确加载,不会将该事件记录到系统日志中,即“-”表示可选项
    2. 如果配置文件放置在/etc/pam.d文件夹下,则配置文件中没有service选项,且配置文件的名字为service名字,文件名必须小写,配置语法区分大小写,配置规则格式为:
      •    service  type   control  module-path  module-arguments
      •    服务名称  类型  控制    模块路径    模块参数 
  2.     Linux-PAM配置语法:
    1. type类型共分为四个管理组  
      1.  account manager(account):提供账户服务验证,如账户密码是否过期,是否对该账户提供服务
      2.  authentication manager(auth):负责对用户进行认证并建立用户凭证;通常该模块通过交互式方法进行认证,比如你应当输入密码证明你是你,但并非所有的认证都是该类型  
      3.  password manager(password):进授权认证机制进行更新,如更改密码
      4.  session manager(session):当开启一个新会话时,该模块负责处理会话的准备任务,而当关闭某一个会话时,该模块负责善后工作,如卸载该用户home目录
    2. control分为简单和复杂两种语法结构,简单语法中仅有一个关键字,而复杂语法通过[  ]引入[value=action]选项
      1.  control简单语法包含以下值:
        1. required:当使用此关键字的PAM模块验证失败,最终会导致PAM-API返回失败,但是会等到后续模块全部被验证后才会返回失败
        2. requisite:该关键字与required使用方法类似,但是当PAM验证失败时,requisite会立刻向调用程序或父PAM桟返回失败值;该关键字可以防止攻击者获得系统已存在用户信息,通常该关键字用在重要的系统环境中
        3. sufficient:如果该模块验证成功,而且该模块前无required模块验证失败,sufficient关键字将会向调用程序或者父PAM栈返回成功值而不会再调用后续的验证模块;当调用sufficient模块失败,PAM模块不会受sufficient模块失败影响,将会继续执行验证。
        4. optional:当配置文件中仅有service+optional这一条规则时,optional模块才会起作用
        5. include:将指定配置文件中所有的type类型作为参数包含在此控制语句中
        6. substack:将指定配置文件中type作为参数包含在此控制语句中,和Include不同的是,在substack中完成任务或者die,只会影响substack内控制命令,不会影响完整的stack桟
      2. control复杂语法
        1.   [value1=action1 value2=action2 ...]
        2. valueN代表对应模块中控制语句的返回值,可以是下面的值:success,open_err,symbol_err,service_err,system_err,buf_err,perm_denied,deault等,其中default表示所有未被显式提到的所有值
        3. PAM所有的错误信息列表在 /usr/include/security/_pam_types.h文件夹中
        4. actionN可以使下列值中的某一个:
          1.   ignore:当在模块桟中使用该参数时,该模块桟的返回值不会影响应用程序获得返回值
          2. bad:当使用bad关键字,证明模块桟的返回值代表失败;当该模块式PAM桟中第一个模块时,该模块的状态将会在整个PAM桟中使用
          3. die:和bad关键字作用相同,当使用该动作关键时,会立刻终止模块桟,PAM会立刻返回到调用的应用程序中
          4. ok:该动作指示将PAM的返回值直接用于所有的模块桟中,即如果前一个桟返回的状态是PAM_SUCCESS,'OK‘中的值会重写返回值;如果返回的是失败,则此'OK'的值不会重写返回值。
          5. done:和'OK'动作基本相同,但是PAM会立刻返回到应用程序当中
          6. reset:清空所有模块桟的状态值并以下一个模块进行验证
          7. N:和'OK'副作用相同,但是会跳过接下来的N个模块桟,不允许使用'0'(在某些情况是使用'0'和'OK'作用类似)
      3. 四个关键字required;requisite;sufficient;optional和以下语句有相同作用
        1.   required
          •   [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
        2. requisite
          •   [success=ok new_authtok_reqd=ok ignore=ignore default=die]
        3. sufficient
          •   [success=done new_authtok_reqd=done default=ignore]
        4. optional
          •   [success=ok new_authtok_reqd=ok default=ignore]
    3. module-path:模块路径可以使应用程序使用的PAM模块的文件名,也可是是默认模块的相对路径名:/lib/security 或者/lib64/security
    4. module-arguments:模块参数是以空格作为分隔符的列表,可以用来指定PAM特殊的动作,如果需要在参数中包含空格,需要使用"[ ]",当需要在语法中使用[]时,需使用"\",如 [..[..\]..]->..[..]..;语法中的任何一个错误都会导致验证失败,而且会被记录到系统日志中

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM