PAM - 可插拔认证模块
1、为什么要使用PAM
为了让用户更合理地使用系统,应用程序或服务(如sshd、login、su、password、ftp等)不可避免地需要对用户进行安全认证,若按照各自的规则去配置非常耗费时间和精力且不能重用。
而PAM提供了统一的API,使应用程序的访问控制变得简单方便。
2、介绍
官方地址:http://www.linux-pam.org/
2.1 流程说明
当某个应用程序或服务需要使用PAM来进行认证时,只要它支持PAM,就可以通过修改其相应的PAM配置文件,加放所需要的认证方式。当重新访问时,PAM就会读取相应的配置文件来提供认证功能。
2.2 PAM配置文件
PAM配置文件可能是/etc/pam.conf,或者是 /etc/pam.d/目录下对应服务名称的文件(本文以此形式进行介绍)。
PAM配置文件是由一系列规则组成,一个规则对应一行。
(1)规则语法
service type control module-path module-arguments
(2)字段说明
service (服务名称)
注:在/etc/pam.d/目录下的配置文件,是不包含service部分的,而文件的名字就是service,且文件名必须是小写。
type(account/auth/password/session)
- account
帐户管理,它主要用来限制/允许用户对某个服务的访问时间、当前可用的系统资源(用户的最大数量)或者用户的位置访问服务(例如:root用户只能从控制台登录) - auth
识别用户身份,比如:提示用户输入密码 - password
升级用户的认证标记,比如:密码强度性检测 - session
处理为用户提供服务之前/后需要做的一些事情,比如:记录登录连接信息,挂载目录等
control(required/requisite/sufficient/optional/include/substack)
- required
若当前行认证失败,认证过程仍旧继续,整个栈运行完毕之后返回认证失败;若成功,继续下一个认证。 - requisite
若当前行认证失败,则立即中止并返回认证失败;若成功,继续下一个认证。 - sufficient
若当前行认证成功,并且之前没有任何required认证失败,则立即返回认证成功;若失败,不对结果造成影响并进行下一个认证。 - optional
仅当整个栈中只有这一个认证时才有决定性作用,否则当前行的认证跟最终结果无关。 - include
将其他配置文件中的所有行包含在当前的位置并运行。 - substack
类似include,但substack所包含的行将作为一个子栈,其运行过程不会影响到母栈,子栈的运行结果将作为当前行认证的结果输出。
module-path(模块路径)
如果以“/”开头,则表示模块的全路径,否则表示相对于/lib/security/或/lib64/security/的相对路径。
[root@iZwz9catu2mrq92b07d1d0Z ~]# ls -l /lib64/security/ total -rwxr-xr-x root root Mar pam_access.so -rwxr-xr-x. root root Dec pam_cap.so -rwxr-xr-x root root Mar pam_chroot.so -rwxr-xr-x root root Mar pam_console.so -rwxr-xr-x root root Mar pam_cracklib.so -rwxr-xr-x root root Mar pam_debug.so -rwxr-xr-x root root Mar pam_deny.so ...
module-arguments(模块参数)
3、可用模块
官方文档:http://www.linux-pam.org/Linux-PAM-html/sag-module-reference.html
pam_access - 日志监控风格的访问控制
pam_access.so [ debug ] [ nodefgroup ] [ noaudit ] [ accessfile=file ] [ fieldsep=sep ] [ listsep=sep ]
(1)使用介绍
当用户要访问应用程序时,accessfile(默认是/etc/security/access.conf)就会被扫描来检测用户是否具有访问权限并返回结果。
accessfile中的每一行都包括三个域,以冒号隔开,如下所示:
permission:users/groups:origins
- 第一个域,permission,值为+或-,+表示允许访问,-表示拒绝访问;
- 第二个域,users/groups,列出一个或多个用户名/组名,或者直接使用ALL(代表所有用户和组)。为了区分用户名和组名,组名应加上括号,例如:(group);
- 第三个域,origins,列出一种或多种登录方式,如:tty名称(tty是本地虚拟终端,比如:在阿里云CentOS实例的远程连接中可以切换到不同的虚拟终端,CTRL+ALT+F1代表切换到tty1,CTRL+ALT+F2代表切换到tty2,如此类推),IP地址,ALL(代表所有登录方式)等
(2)参数说明
- debug
大量的调试信息会被syslog记录下来 - nodefgroup
只有写在括号内的名称才会去匹配组文件,例如:(wheel),若没有设置该参数,则先匹配用户文件再匹配组文件 - noaudit
当有用户从未被允许的主机或终端登录时,事件不会被报告 - accessfile=/path/to/access.conf
设置配置文件路径,主要用于不同的服务对应不同的配置 - fieldsep=separators
配置文件的域分隔符,默认的域分隔符是英文冒号,如果fieldsep=|,那么|将作为域分隔符,而英文冒号则被看作普通字符 - listsep=separators
每个域都是一个列表,该选项改变配置文件的列表分隔符,默认的列表分隔符是空格,如果listsep=,,那么逗号将作为列表分隔符,而空格则被看作普通字符,这可能用于用户名或组名含有空格的情况,但必须要注意的是此时字段值与分隔符之间也不能存在空格!
(3)应用场景
例1:限制用户的SSH登录
[root@iZwz9catu2mrq92b07d1d0Z ~]# cp /etc/pam.d/sshd /etc/pam.d/sshd_backup //修改SSH对应的PAM配置文件,新增pam_access模块认证 [root@iZwz9catu2mrq92b07d1d0Z ~]# vi /etc/pam.d/sshd #%PAM-1.0 account requisite pam_access.so nodefgroup accessfile=/etc/mypam/access_ssh.conf fieldsep=| listsep=, [root@iZwz9catu2mrq92b07d1d0Z ~]# mkdir /etc/mypam //编辑accessfile(注:匹配的顺序从第一行开始) [root@iZwz9catu2mrq92b07d1d0Z ~]# vi /etc/mypam/access_ssh.conf #允许root和组mygroup1的成员登录 +|root (mygroup1)|ALL #拒绝root和组mygroup1的成员以外的用户登录 -|ALL EXCEPT root (mygroup1)|ALL #拒绝指定用户从非指定的ip进行登录 -|cjh|ALL EXCEPT 120.231.146.242
pam_nologin - 防止非root用户登录
http://www.linux-pam.org/Linux-PAM-html/sag-pam_nologin.html
pam_tally2 - 登录计数器
http://www.linux-pam.org/Linux-PAM-html/sag-pam_tally2.html
PAM - 可插拔认证模块的更多相关文章
- 【Linux】常用的Linux可插拔认证模块(PAM)应用举例:pam_limits.so、pam_rootok.so和pam_userdb.so模块
常用的Linux可插拔认证模块(PAM)应用举例:pam_limits.so.pam_rootok.so和pam_userdb.so模块 pam_limits.so模块: pam_limits.so模 ...
- Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
PAM的配置文件: 我们注意到,配置文件也放在了在应用接口层中,他与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的.他的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模 ...
- Linux操作系统 可插拔认证模块PAM(3)
六.Linux 操作系统安全登陆设计 自己编写PAM 模块并编译成动态链接库so 文件,将其添加进/etc/pam.d/login 文件中实现命令行安全登陆设计,将其添加进/etc/pam.d/lig ...
- 常用的Linux可插拔认证模块(PAM)应用举例(一)
pam_access.so模块 pam_access.so模块主要的功能和作用是根据主机名(包括普通主机名或者FQDN).IP地址和用户实现全面的访问控制.pam_access.so模块的具体工作行为 ...
- [read -p应用]插拔光模块去检查port present状态
#!/bin/bash path="/sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-15/15-0060" a ...
- Prism学习--实现可插拔的模块
首先,在使用Prism框架加载的程序集中分别添加一个类,并让这些类实现IModule接口.当Prism框架加载某个程序集后,将首先在程序集中搜索实现了该接口的类.之后将会调用该接口的Initializ ...
- Django中间件-跨站请求伪造-django请求生命周期-Auth模块-seettings实现可插拔配置(设计思想)
Django中间件 一.什么是中间件 django中间件就是类似于django的保安;请求来的时候需要先经过中间件,才能到达django后端(url,views,models,templates), ...
- Oracle12c中多宿主容器数据库(CDBs)和可插拔数据库(PDBs)新特性之运行脚本
对开发者和DBA们来说,对shell脚本批量任务的影响成了多宿主选项带来的最大改变之一.因为多宿主环境通过服务来连接到可插拔数据库,因此,依靠CRON和OS认证成了换成多宿主环境后的一个最大问题.本文 ...
- Django基础八之认证模块---auth
Django基础八之认证模块---auth 目录 Django基础八之认证模块---auth 1. auth介绍 2. autho常用操作 2.1 创建用户 2.2 验证用户 2.3 验证用户是否登录 ...
随机推荐
- 剖析Prometheus的内部存储机制
Prometheus有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用3.5byte左右空间,上百万条时间序列,30秒间隔,保留60天,大概花了200多G(引用官方PPT). 接下来让我们看看他 ...
- Windows下Mysql5.7开启binlog步骤及注意事项
1.查看是否开启了binlog:show binary logs; 默认情况下是不开启的. 2.开启binlog:修改mysql的配置文件my.ini.添加如下配置: 该文件默认不允许修改,需要右键“ ...
- JavaScript--我发现,原来你是这样的JS(引用类型不简单,且听我娓娓道来)
一.介绍 没错,这是第五篇,到了引用类型,这次要分成两次博文了,太多内容了,这是前篇,篇幅很长也很多代码,主要讲引用类型和常用的引用类型,代码试验过的,老铁没毛病. 坚持看坚持写,不容易不容易,希望大 ...
- Linux系统Shell脚本编程
1. shell脚本概念:C语言编写的.命令解释器.编程语言. 是用户使用linux的桥梁. shell脚本语言非常擅长处理文本类型的数据. 2. shell脚本作用:自动化管理.监控管理.日志数据处 ...
- 忘记root密码,进入单用户模式修改密码
进入单用户模式 rhel61.在系统数秒时,按下键,进入到系统引导菜单 中2.选择系统后 按“e”键 选择kernel后 按“e”键 后空格 1+回车 b:启动系统 进入到单用户模式 rhel71.在 ...
- Windows下mysql5.5主从同步
前置条件: A主机(作为主服务器) 环境:Win7,mysql5.5 IP:172.17.42.82 B主机(作为从服务器) 环境:Win7,mysql5.5 IP:172.17.42.156 主服务 ...
- 微信小程序用setData修改数组或对象中的一个属性值
在page中有如下数组 data: { info:[ { name:"yuki", tou:"../img/head.jpg", zGong:130, gMon ...
- HDU 3584 Cube(三位树状数组)
Cube Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submi ...
- 在SQL Server中实现关系模型
使用SQL Server的Transact-SQL(T-SQL)方言,此楼梯将为您提供如何使用SQL Server表中的数据的基本了解. DML是数据操作语言,是处理数据的语言的一个方面.它包括SEL ...
- 2017上海QCon之旅总结(下)
本来这个公众号的交流消息中间件相关的技术的.十月去上海参加了QCon,第一次参加这样的技术会议,感受挺多的,所以整理一下自己的一些想法接公众号和大家交流一下. 三天的内容还挺多的,之前已经有上篇和中篇 ...