Linux下PAM认证详解(以centos7为例)

这篇具有很好参考价值的文章主要介绍了Linux下PAM认证详解(以centos7为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux下PAM认证详解(以centos7为例)

PAM简介(Pluggable Authentication Modules,可插拔认证模块)

 Sun公司于1995年开发的一种与认证相关的通用框架机制:PAM(可插拔认证模块)是实现认证工作的一个模块。
    
    因为每个服务都用到不同的认证方式,所以就需要不同的认证库。
    认证库有文本文件,MySQL数据库,NIS ,LDAP等,这些库所对应的系统模块位于/lib64/security/目录下的所有库文件(以".so"后缀的文件)。
    PAM是关注如何为服务验证用户的API(应用程序接口),通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开。
    使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式,而无需更改服务程序。
    
    PAM是一种认证框架,自身不做认证。
    PAM提供了对所有服务进行认证的中央机制,适用于login ,远程登录(telnet,rlogin,fsh,ftp, 点对点协议(PPP )),su等应用程序中。
    系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。
    应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( )) 来实现对认证方法的调用。
    PAM 服务模块的开发者则利用PAM SPI来编写模块(主要是引出一些函数pam_sm_xxxx( ) 供PAM 接口库调用),将不同的认证机制加入到系统中。
    PAM 接口库(libpam )则读取配置文件,将应用程序和相应的PAM 服务模块联系起来 。

PAM架构

Linux下PAM认证详解(以centos7为例)

PAM认证原理

PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so。

PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。认证原理图如下图所示:

Linux下PAM认证详解(以centos7为例)

PAM 认证过程

1)使用者执行/usr/bin/passwd程序,并输入密码。

2)passwd开始呼叫PAM模块,PAM模块会搜寻passwd程序的PAM 相关设定文件,这个设定文件一般是在/etc/pam.d/里边的与程序同名的文件 ,即PAM 会搜寻/etc/pam.d/passwd这个设置文件。

3)经由/etc/pam.d/passwd 设定文件的数据,取用PAM 所提供的相关模块来进行验证。

4)将验证结果回传给passwd 这个程序,而passwd 这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)

PAM的配置文件

1)pam的配置文件当中为每种应用定义其需要用到的模块,包括驱动、授权机制等。
	2)配置文件
		模块文件目录:	/lib64/security/*.so
		模块配置文件:	/etc/security/*.conf
		环境相关的设置:	/etc/security/
		主配置文件:	/etc/pam.conf ,默认不存在。
		次级配置文件目录:	/etc/pam.d/,该配置文件目录下的每个配置文件都对应一个应用模块的专用配置文件
		注意:
			如/etc/pam.d 存在,/etc/pam.conf 将失效
	3)模块通过读取模块配置文件完成用户对系统资源的使用控制
	4)注意:修改PAM 配置文件将马上生效
	5)建议:编辑pam规则时 ,保持至少打开一个root会话,以防止root 身份验证错误
	6)通用配置文件/etc/pam.conf 格式
		application 、type 、control 、module-path 、module-arguments
	7)专用配置文件/etc/pam.d/* 格式
		type、control、module-path、module-arguments
	8)说明:
		1》tyoe(功能,模块类型):
			包括auth,account,password,session。
			auth:	认证和授权;
			account:	与账号管理相关的非认证功能;
			password:	用户修改密码时使用;
			session:	用户获取到服务前后使用服务完成后要进行的一些附属性操作
			-type:	表示因为缺失而不能加载的模块将不记录到系统日志, 对于那些不总是安装在系统上的模块有用
			
		2》control:
			pam如何处理与该服务相关的pam的成功或失败情况?同一种功能的多个检查之间如何进行组合?有两种实现机制。
			1.使用一个关键词来定义:
				required(必填):	一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕再将失败结果返回给应用程序。 必要条件
				requisite(必要):	一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type 内的任何模块,而是直接将控制权返回给应用程序。必要条件
				sufficient(足够):	一票通过, 表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略。充分条件
				optional(可选项):	表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
				include(包括):	使用其他配置文件中同样功能的相关定义来进行检查
			2.使用一到多组“return status=action”来定义;
				[status1=action1  status2=action2....]
				status:	指定此项检查的返回值,其可能的取值有多种。如success。
				action:	采取的操作,其可能的取值常用的有6种,如ok,done,die,ignore,bad,reset。
				ok 	模块通过,继续检查
				done  	模块通过,返回最后结果给应用
				bad  	结果失败,继续检查
				die  	结果失败,返回失败结果给应用
				ignore  	结果忽略,不影响最后结果
				reset  	忽略已经得到的结果
		3》module-path:
			模块路径,用来指明本模块对应的程序文件的路径名。
			相对路径
			绝对路径
			
		4》module-argument:
			模块参数,用来传递给该模块的参数。
			pam_unix.so:	
			nullok:	允许使用空密码;
			try_first_pass:	提示用户输入密码之前,首先检查此前栈中已经得到的密码;
			pam_env.so:	通过配置文件来为用户设定或撤销环境变量,/etc/security/pam_env.conf
			pam_shells.so:	检查用户使用的是否为合法shell,/etc/shells
			pam_limits.so:	资源限制,/etc/sercurity/limits.conf ;/etc/sercurity/limits.d/*

安全等保常用的PAM配置文件

/etc/pam.d/password-auth 和 /etc/pam.d/system-auth 文件,对于pam认证的安全配置大多在这两个文件上进行修改。

注意:修改PAM 配置文件将马上生效。
建议:编辑pam规则时 ,保持至少打开一个root会话,以防止root 身份验证错误,对于修改完的pam文件及时验证root登录正确性。

已知情况:一般pam规则修改不正确,登录时会出现 su:Module is unknow、su: Permission denied

Linux下PAM认证详解(以centos7为例)

PAM文档

/usr/share/doc/pam-*
	rpm -qd pam
	man –k pam
	man 模块名,如man rootok
	《The Linux-PAM System Administrators' Guide》

限制的实现方式

	共有3种方式:
		1)通过ulimit命令
		2)在/etc/security/limits.d/目录下创建限制文件来实现
		3)修改/etc/pam.d/目录下的配置文件,这是使用pam模块来实现的
	1)ulimit 命令,修改shell资源的限制,立即生效,但无法保存。
		ulimit-Modify shell resource limits.
		ulimit [-SHacdefilmnpqrstuvx] [limit]
		Options:
			-S		使用软资源限制
			-H		使用硬资源限制
			-a		所有当前限制的报告
			-b		套接字缓存尺寸
			-c		最大的核心文件创建尺寸
			-d		最大程序的数据分割尺寸
			-e		最大的调度优先级(`nice')
			-f		被shell及其子进程写入文件的最大尺寸
			-i		最大待定信号的数值
			-l		进程可能锁定到内存的最大尺寸
			-m		最大驻留设置尺寸
			-n		最大打开文件描述符的数值
			-p		管道缓存尺寸
			-q		POSIX 消息队列中的最大字节数
			-r		最大实时调度优先级
			-s		最大堆尺寸
			-t		cpu 时间的最大值 (以秒为单位)
			-u		用户进程的最大值
			-v		虚拟内存的尺寸
			-x		文件锁定的最大数值
			-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>:
					指定item所对应的具体值
	3)修改/etc/pam.d/目录下的配置文件
		使用PAM模块实现:
		1》模块:pam_shells
			功能:检查有效shell
			man pam_shells
			示例:不允许使用/bin/csh 的用户本地登录
				vim /etc/pam.d/login
					auth required pam_shells.so
				vim /etc/shells
					去掉 /bin/csh
				useradd –s /bin/csh testuser
				testuser 将不可登录
				tail /var/log/secure
		2》模块:pam_securetty.so
			功能:只允许root 用户在/etc/securetty 列出的安全终端上登陆
			示例:允许root 在telnet 登陆
				vi /etc/pam.d/login
				#auth required pam_securetty.so # 将这一行加上注释
				或者/etc/securetty 文件中加入pts/0,pts/1…pts/n
		3》模块:pam_nologin.so
			功能: 如果/etc/nologin 文件存在, 将导致非root用户不能登陆,如果 用户shell 是/sbin/nologin 时,当该用户登陆时,会显示/etc/nologin.txt 文件内容,并拒绝登陆
		4》模块:pam_limits.so
			功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间,最多打开的文件数和运行进程数。
				vim  /etc/pam.d/system-auth
					session  required  pam_limits.so
				vim  /etc/security/limits.conf
					apache  –  nofile  10240	apache用户可打开10240个文件
					student  hard  nproc  20  	不能运行超过20个进程
	

参考连接:https://www.cnblogs.com/shenxm/p/8451889.html文章来源地址https://www.toymoban.com/news/detail-515751.html

到了这里,关于Linux下PAM认证详解(以centos7为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CentOS7(Linux)详细安装教程(手把手图文详解版)_centos7安装教程

    3、选择合适版本的镜像进行下载 选择合适的存放地址(这里的地址包含中文名称我用起来好像也没出啥问题,如果怕出错的同学可以使用全英文) 1、打开我们的虚拟机(VMware Workstation),点击文件进行新建 2、选择典型之后,下一步 3、选择稍会安装操作系统 4、因为安装的

    2024年04月29日
    浏览(55)
  • 【Linux】详解Centos7的下载安装配置

    本文时间 2023-05-17 作者:sugerqube漆瓷 centos8已经停止维护,centos7将在2024-06-30停止维护(所以暂时选7) 未来替代品参考: AlmaLinux https://almalinux.org/ CloudLinux公司搞得RHEL下游发行版 RockyLinux https://rockylinux.org/ Gregory Kurtzer发起搞得RHEL下游发行版 附:常用Linux发行版操作系统大盘点

    2024年02月05日
    浏览(55)
  • CentOS7(Linux)详细安装教程(手把手图文详解版)

    目录 一、CentOS镜像的下载(准备工作) 1、官网地址:https://www.centos.org/(官网的下载速度会很慢,不推荐) 2、其他镜像源的下载地址(推荐) 3、选择合适版本的镜像进行下载  二、环境的安装 1、打开我们的虚拟机(VMware Workstation),点击文件进行新建 2、选择典型之后,

    2024年02月08日
    浏览(54)
  • Linux(CentOS7)安装与卸载MySQL8.0图文详解

    Mysql数据库的安装对于开发者来说,是我们必然会面对的问题,它的安装过程其实并不复杂,并且网络上的安装教程也非常多,但是对于新手来说,各种不同形式的安装教程,又给新手们带来了要选择哪种方式进行安装的难题,而且很多时候按照教程也没有能够安装成功,安

    2023年04月25日
    浏览(48)
  • CentOS系统环境搭建(八)——CentOS7开机自动执行脚本(以MySQL为例)

    以MySQL为例子 /srv下新建system文件夹 新建脚本run.sh run.sh内容如下 /dev/null 21 将所有输出重定向到空设备,即不输出日志。最后的 符号将命令放到后台运行。

    2024年02月12日
    浏览(60)
  • Linux——系统安全及应用(账号安全、su命令、PAM认证、sudo命令、开关机安全机制、系统弱口令检测、NMAP)

    文件无法被修改的原因:权限不够或者账号被锁住了 设置密码有效期 闲置600秒后自动注销 用途:Substitute User,切换用户 格式:su - 目标用户 root-任意用户,不验证密码 普通用户-其他用户,验证目标用户的密码 将允许使用su命令的用户加入wheel组 启用pam_wheel认证模块 [root@

    2024年01月23日
    浏览(53)
  • Linux|centos7操作系统|无线WiFi的命令行配置---wpa_supplicant详解

    Linux系统下,可以配置无线网卡的工具和方法有很多,比如,nmcli,iw,wap_supplicant,hostapd 或者直接安装桌面,图形化配置等等 这些工具比较多,但基本都是一个共同的流程:先利用工具扫描到AP,然后设置无线网卡的连接方式,最后无线网卡连接无线路由,完成WiFi连接 那么

    2024年01月23日
    浏览(64)
  • centos7 docker开启认证的远程端口2376配置

    docker开启2375会存在安全漏洞 暴露了2375端口的Docker主机。因为没有任何加密和认证过程,知道了主机IP以后,,任何人都可以管理这台主机上的容器和镜像,以前贪图方便,只开启了没有认证的docker2375端口,后来被黑客通过这个端口推送了一个挖矿木马病毒的镜像并运行,所

    2024年02月03日
    浏览(35)
  • 超算集群安装OpenFOAM-LIGGGHTS-CFDEM(普通用户权限-以CSU HPC CentOS7.9为例)

    普通用户权限超算集群安装OpenFOAM-LIGGGHTS-CFDEM,由于缺少root权限,无法根据CFDEM官方instruction进行安装。 本文以CSU超算平台为例,利用普通用户权限进行编译安装。文章修正了已有教程中部分问题,特别感谢希望先生与记得小蘋初见教程。 1. 安装必要依赖包 此部分在记得小蘋

    2024年02月05日
    浏览(146)
  • Linux搭建pikachu靶场(以centos为例)

    Pikachu是一个使用PHP语言编写的Web漏洞测试靶场。下面是在CentOS 7上安装Pikachu靶场的步骤: 安装LAMP (Linux, Apache, MySQL, PHP) 堆栈 : 首先,需要在CentOS 7服务器上安装LAMP堆栈。 安装Apache: 安装MySQL (MariaDB): 安装PHP: 下载并安装Pikachu靶场 : 首先,需要通过Git将Pikachu靶场的源代

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包