ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

LinuxPAM验证账户之间的安全切换

2019-08-27 10:00:42  阅读:142  来源: 互联网

标签:配置文件 验证 LinuxPAM 账户 pam 切换 模块 root PAM


 CentOS - 系统认证机制pam

 

linux下PAM模块全称是Pluggable Authentication Module for linux(可插入式授权管理模块),该由Sun公司提供,在Linux中,PAM是可动态配置的,本地系统管理员可以自由选择应用程序如何对用户进行身份验证。PAM应用在许多程序与服务上,比如登录程序(login、su)的PAM身份验证(口令认证、限制登录),passwd强制密码,用户进程实时管理,向用户分配系统资源等。

 

配置文件

 

PAM的配置文件位置 /etc/pam.conf,也可以在/etc/pam.d/文件夹下配置单独的文件,当存在/etc/pam.d文件夹时,Linux-PAM将会使用/etc/pam.d文件夹下的配置文件而忽略/etc/pam.conf配置文件。

 pam.conf配置文件中,配置内容写在一行内,也可以以"\"作为连接符将配置内容写在多行;pam.conf以空格作为分割标记,#代表标注信息;“-”如果在配置语句前面加上该符号,在系统登录时如果该模块未被正确加载,不会将该事件记录到系统日志中,即“-”表示可选项。

 如果配置文件放置在/etc/pam.d文件夹下,则配置文件中没有service选项,且配置文件的名字为service名字,文件名必须小写,配置语法区分大小写,配置规则格式为:

service  type   control  module-path  module-arguments

服务名称  类型  控制    模块路径    模块参数 

 

 

 

type类型

 

account manager(account):提供账户服务验证,如账户密码是否过期,是否对该账户提供服务

 

authentication manager(auth):负责对用户进行认证并建立用户凭证;通常该模块通过交互式方法进行认证,比如你应当输入密码证明你是你,但并非所有的认证都是该类型  

 

password manager(password):进授权认证机制进行更新,如更改密码

 

session manager(session):当开启一个新会话时,该模块负责处理会话的准备任务,而当关闭某一个会话时,该模块负责善后工作,如卸载该用户home目录

 

control控制

 

control分为简单和复杂两种语法结构,简单语法中仅有一个关键字,而复杂语法通过[ ]引入[value=action]选项

 

1、control简单语法包含以下值:

 

required:当使用此关键字的PAM模块验证失败,最终会导致PAM-API返回失败,但是会等到后续模块全部被验证后才会返回失败

 

requisite:该关键字与required使用方法类似,但是当PAM验证失败时,requisite会立刻向调用程序或父PAM桟返回失败值;该关键字可以防止***者获得系统已存在用户信息,通常该关键字用在重要的系统环境中

 

sufficient:如果该模块验证成功,而且该模块前无required模块验证失败,sufficient关键字将会向调用程序或者父PAM栈返回成功值而不会再调用后续的验证模块;当调用sufficient模块失败,PAM模块不会受sufficient模块失败影响,将会继续执行验证。

 

optional:当配置文件中仅有service+optional这一条规则时,optional模块才会起作用

 

include:将指定配置文件中所有的type类型作为参数包含在此控制语句中

 

substack:将指定配置文件中type作为参数包含在此控制语句中,和Include不同的是,在substack中完成任务或者die,只会影响substack内控制命令,不会影响完整的stack桟

 

 

2、control复杂语法

 

[value1=action1 value2=action2 ...]

 

valueN代表对应模块中控制语句的返回值,可以是下面的值:success,open_err,symbol_err,service_err,system_err,buf_err,perm_denied,deault等,其中default表示所有未被显式提到的所有值

 

PAM所有的错误信息列表在 /usr/include/security/_pam_types.h 目录中

 

actionN可以使下列值中的某一个:

ignore:当在模块桟中使用该参数时,该模块桟的返回值不会影响应用程序获得返回值

 

bad:当使用bad关键字,证明模块栈的返回值代表失败;当该模块式PAM桟中第一个模块时,该模块的状态将会在整个PAM桟中使用

 

die:和bad关键字作用相同,当使用该动作关键时,会立刻终止模块桟,PAM会立刻返回到调用的应用程序中

 

ok:该动作指示将PAM的返回值直接用于所有的模块桟中,即如果前一个桟返回的状态是PAM_SUCCESS,'OK‘中的值会重写返回值;如果返回的是失败,则此'OK'的值不会重写返回值。

 

done:和'OK'动作基本相同,但是PAM会立刻返回到应用程序当中

 

reset:清空所有模块桟的状态值并以下一个模块进行验证

 

N:和'OK'副作用相同,但是会跳过接下来的N个模块桟,不允许使用'0'(在某些情况是使用'0'和'OK'作用类似)

 

四个关键字required;requisite;sufficient;optional和以下语句有相同作用

 

required

[success=ok new_authtok_reqd=ok ignore=ignore default=bad]

 

requisite

[success=ok new_authtok_reqd=ok ignore=ignore default=die]

 

sufficient

[success=done new_authtok_reqd=done default=ignore]

 

optional

[success=ok new_authtok_reqd=ok default=ignore]

module-path

 

模块路径可以使应用程序使用的PAM模块的文件名,也可是是默认模块的相对路径名:/lib/security 或者/lib64/security

 

module-arguments

 

模块参数是以空格作为分隔符的列表,可以用来指定PAM特殊的动作,如果需要在参数中包含空格,需要使用"[ ]",当需要在语法中使用[]时,需使用"\",如 [..[..\]..]->..[..]..;语法中的任何一个错误都会导致验证失败,而且会被记录到系统日志中


        在没有利用centos的PAM模块之前,普通用户可以随意的切换到root账户(前提是知道root账户的密码),即使知道root密码随意登陆root账户也会造成一些不安全的因素

        现在在我的系统上可以登陆系统shell环境的有root,zhangsan,wangwu三个账户

image.png


        现在我就利用这个两个账户试着跟root账户切换看一看,发现现在这两个普通账户可以跟root(管理员账户)之间来回切换.  这样有着很多的安全隐患,现在要实现的目标是禁用这些账户对root账户随意切换的功能

 image.png

        为了实现这个功能就要利用了CentOS的PAM验证机制,而这个PAM验证机制的配置文件救灾在/etc/pam.d/目录下面. 打开一看已经发现这个su的命令就在里面

image.png


        现在使用vim /etc/pam.d/su命令对这个su命令的配置文件进行设置. 请注意看下图的用框框起来的地方. 这是一个验证模块,因为前面有一个#号相当于被注释了,也就是这个模块没有被开启. 如果想开启这个验证模块就要把之前的注释符号"#"给删除就可以了

image.png


        现在这边把#删除了,然后按"wq"保存退出  就代表已经启用了这个su命令的验证模块

 image.png


        然后切换到zhangsan的普通账户,看看能不能再切回到root账户,这边发现普通用户已经不能再切换回root账户了,是因为刚才启用了刚才的PAM验证模块

image.png


        这边还有一个wheel(安全组)的概念,也就说被添加到这个组的成员可以执行跟root账户来回的切换以及使用root账户的命令.  现在使用gpasswd -a zhangsan wheel命令把zhangsan用户添加到wheel(安全组)当中去看看能不能切换到root用户

image.png


         切换到zhangsan用户后再切换root账户,发现已经成功的切换了,为什么了?因为刚刚把zhangsan用户添加到了wheel(安全组)当中去了 ,然后再试着切换到wangwu账户,再切换到root账户发现已经切换不了,因为wangwu账户没有被添加到wheel(安全组)当中去 

        这边就利用PAM验证模块实现了账户之间的一个安全切换的问题

image.png




 


 

标签:配置文件,验证,LinuxPAM,账户,pam,切换,模块,root,PAM
来源: https://blog.51cto.com/14451009/2432807

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有