PAM认证机制



PAM:Pluggable Authentication Modules

认证库:文本文件,MySQL,NIS,LDAP等

PAM 是关注如何为服务验证用户的API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开

使得系统管理员可以灵活地根据需要给不同的服务配置不 同的认证方式而无需更改服务程序

它提供了对所有服务进行认证的中央机制,适用于login,远 程登录(telnet,rlogin,fsh,ftp,点对点协议(PPP)),su等 应用程序中。系统管理员通过PAM配置文件来制定不同应用 程序的不同认证策略;应用程序开发者通过在服务程序中使 用PAM API(pam_xxxx( ))来实现对认证方法的调用;而 PAM服务模块的开发者则利用PAM SPI来编写模块(主要是 引出一些函数pam_sm_xxxx( )供PAM接口库调用),将不 同的认证机制加入到系统中;PAM接口库(libpam)则读取 配置文件,将应用程序和相应的PAM服务模块联系起来。

PAM架构



PAM认证原理



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

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

PAM相关文件

模块文件目录:/lib64/security/*.so

环境相关的设置:/etc/security/

主配置文件:/etc/pam.conf,默认不存在

为每种应用模块提供一个专用的配置文件: /etc/pam.d/APP_NAME ü

注意:如/etc/pam.d存在,/etc/pam.conf将失效

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回传的结果决定下一个动作(重新输入密码或者通 过验证)

通用配置文件/etc/pam.conf格式

application type control module-path arguments

专用配置文件/etc/pam.d/* 格式

type  control  module-path  arguments

说明:

服务名(application) telnet、login、ftp等,服务名字“OTHER”代表所有没 有在该文件中明确配置的其它服务

模块类型(module-type)

control PAM库该如何处理与该服务相关的PAM模块的成 功或失败情况 ü module-path 用来指明本模块对应的程序文件的路径名

Arguments 用来传递给该模块的参数

模块类型(module-type)

Auth 账号的认证和授权

Account 与账号管理相关的非认证类的功能,如:用来限 制/允许用户对某个服务的访问时间,当前有效的系统资源 (最多可以有多少个用户),限制用户的位置(例如:root用 户只能从控制台登录)

Password 用户修改密码时密码复杂度检查机制等功能

Session 用户获取到服务之前或使用服务完成之后需要进 行一些附加的操作,如:记录打开/关闭数据的信息,监视 目录等

-type 表示因为缺失而不能加载的模块将不记录到系统日 志,对于那些不总是安装在系统上的模块有用

Control:

PAM库如何处理与该服务相关的PAM模块成功或失败情况

两种方式实现:简单和复杂

简单方式实现:一个关健词实现

required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕 再将失败结果返回给应用程序。即为必要条件

requisite :一票否决,该模块必须返回成功才能通过认证, 但是一旦该模块返回失败,将不再执行同一type内的任何模 块,而是直接将控制权返回给应用程序。是一个必要条件

sufficient :一票通过,表明本模块返回成功则通过身份认 证的要求,不必再执行同一type内的其它模块,但如果本模 块返回失败可忽略,即为充分条件

optional :表明本模块是可选的,它的成功与否不会对身份 认证起关键作用,其返回值一般被忽略

include: 调用其他的配置文件中定义的配置信息

比如我们查看一下/etc/pam.d中的一个配置文件,第一列就是模块的类型,第二列就是control,第三列就是我们所要调用的库,有些文件的配置格式中只有这三项,但是有些文件是四项。

module-path: 模块路径

相对路径:

/lib64/security目录下的模块可使用相对路径

如:pam_shells.so、pam_limits.so

绝对路径:

模块通过读取配置文件完成用户对系统资源的使用控制

/etc/security/*.conf

注意:修改PAM配置文件将马上生效

建议:编辑pam规则时,保持至少打开一个root会话,以防止 root身份验证错误

Arguments 用来传递给该模块的参数

模块:pam_shells

功能:检查有效shell

如果修改vim /etc/pam.d/login只要和登陆相关的程序都受影响,因为用户一登陆就会调用这个login程序

如果只修改vim /etc/pam.d/sshd这个配置文件,那就只会影响ssh的连接

实验



1、创建一个用户并且这个用户的shells类型是/bin/csh

useradd -s /bin/csh test

可以在查看一下/etc/passwd是否设置正确

2、在/etc/shells中删除/bin/csh这一行

3、然后在其他主机试着用ssh连接这个用户,注意,必须是连接这个用户,因为只是修改了这个用户的shells

看见如上字样那就说明我们的实验是成功的,因为在172.18.77.7这台主机上设置了sshd这个服务,且在/etc/pam.d/sshd中定义了用户用sshd连接是检查shells的类型。(调用了pam_shells.so这个库)这个库的作用就是检查/etc/shells这个文件中有没有对应的shells类型,没有/bin/sch这样的shells类型就会拒绝。

现在在尝试做另一个小实验修改vim /etc/pam.d/login文件,将同样的设置放在这个配置文件中

切换普通用户登录,依然会登上去,因为可能没有调用login程序

采用本地登录的方式就会看到明显的效果了,如下图所示

两个小实验已经做完了,收获不小吧!还可以查看日志cat /var/log/secure

如果还不明白,也可以将上述设置放入到/etc/pam.dsu这个文件里,看看效果

可以直接切换用户就可以看到明显的效果

模块:pam_securetty.so v

功能:只允许root用户在/etc/securetty列出的安全终端上登陆

cat /etc/securetty

这里面放置的是限制root用户登录在特定的设备上,安全的登陆tty终端

示例:

允许root在telnet登陆

vi /etc/pam.d/login #auth required pam_securetty.so

#将这上面一行加上注释

如果登录不成功,可能是其他的文件配置中也有上面那一行,搜索注释就可以了

经过实验证明只要注释掉remote这个文件中的那一行就可以登录,看来登录的时候没有启动login这个文件,remote文件是负责远程登录的。

或者/etc/securetty文件中加入 pts/0,pts/1…pts/n

也可以用第一种方法用telnet登录上去后看看tty是什么,然后在/etc/securetty中加上就可以

模块:pam_nologin.so

功能:如果/etc/nologin文件存在,将导致非root用户不能登陆,如果用户shell是/sbin/nologin 时,当该用户登陆时会显示/etc/nologin.txt文件内容,并拒绝登陆

默认/etc/nologin这个文件是不存在的,若果将改文件创建则不是root用户就不能登录,该文件中有内容的话,会显示该文件中的内容。

示例:

echo "do not allow access" > /etc/nologin

在做一个小实验证明一下,将/etc/pam.d/su文件中加上一行下面的字样

这样的话用su - wang 切换也是不可以的

如果

/etc/nologin

这个文件不在默认路径下,将它移到/app/下,则普通用户是可以登录的,想要普通用户不能登录,则要在login指定文件路径,如下所示

时间有限,就介绍这几个模块,谢谢!

时间: 2024-11-05 00:03:04

PAM认证机制的相关文章

PAM 认证机制

v PAM:Pluggable Authentication Modules ü  认证库:文本文件,MySQL ,NIS ,LDAP等 等 ü Sun 公司于1995  年开发的 一种 与 认证 相关的通用框架 机制 ü PAM 是关注如何为服务验证用户的 API, 通过提供一些动 态链接库和一套统一的API ,将系统提供的服务和该服务的 认证方式分开 ü  使得系统管理员可以灵活地根据需要给不同的服务配置不 同的认证方式而无需更改服务程序 ü  一种认证框架,自身不做认证 v  它提供了对所

[转帖]Linux-PAM认证机制

https://www.cnblogs.com/marility/articles/9235522.html 鸟哥私房菜里面有这个地方 但是当时没注意. 早上弄vsftpd的时候掉坑里了 这会儿 百度一下 简单学习学习.. 这个博客挺好的 我学到了 ldd命令 还有 strings 命令 linux 庞大而复杂 需要不停的学习和使用才可以. 在新主机更改用户密码的时候,经常会出现"passwd: Have exhausted maximum number of retries for servi

AIDE,sudo,TCP_Wrappers,PAM认证等系统安全访问机制

AIDE 高级入侵检测环境:是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了. AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件.AIDE数据库能够保存文件的各种属性,包括:权限(permission).索引节点序号(inode number).所属用户(user).所属用户组(group).文件大小.最后修改时间(mtime).创建时间(ctime).最后访问时间(atime).增加的大小以及连接数.AIDE还能够使用下列算法:sha

nsswitch&PAM认证框架

一.nsswitch概述 1.nsswitch:network/name  service  switch nsswitch网路名称服务解析是通用框架,与各种类型存储进行交互的公共模块化实现: 实现:/usr/lib64/libnss*,/lib64/libnss* 框架模块:libnss:驱动模块:libnss_files- 2.配置文件:/etc/nsswitch.conf (1)格式 为每一种用到解析库的应用通过配置定义其位置,格式======解析库: store1  store2  -=

什么是PAM认证

PAM(Pluggable Authentication Modules )是由 Sun 提出的一种用于实现应用程序的认证机制.其核心是一套共享库,目的是提供一个框架和一套编程接口,将认证工作由程序员交给管理员,PAM 允许管理员在多种认证方法之间作出选择,它能够改变本地认证方法而不需要重新编译与认证相关的应用程序,同时也便于向系统中添加新的认证手段. PAM 最初是集成在 Solaris 中,目前已移植到其它系统中,如 Linux.SunOS.HP-UX 9.0 等,并在 Linux 中得到广

Linux用户安全及Linux PAM验证机制

一.Linux身份验证 1.用户与系统管理员     >用户分为系统管理员与普通管理用户两大类.            >每个用户在系统中都有唯一的用户名,是用户使用系统的凭证.     >系统管理员(System Manager) 又称之为超级用户,账号为"root",也叫根用户,拥有系统操作最高行使权.         >在系统中具有最高权限,主要负责系统管理工作.     >普通用户的账号可以随意取,通常的要求是不能以数字和下划线作为第一个字符.  

PAM认证

PAM(Pluggable Authentication Modules) Sun公司于1995年开发的一种与认证相关的通用框架机制:PAM. 可插入式认证模块,是实现认证工作的一个模块. 因为每个服务都用到不同的认证方式,所以就需要不同的认证库. 认证库有文本文件,MySQL数据库,NIS ,LDAP等,这些库所对应的系统模块位于/lib64/security/目录下的所有库文件(以".so"后缀的文件). PAM是关注如何为服务验证用户的API(应用程序接口),通过提供一些动态链接

[CentOS 7系列]使用密钥认证机制远程登录

当服务器操作系统没有配置远程密钥认证时,默认需要手动输入密码口令. 以下用putty为例: 1.使用putty远程ssh登录192.168.137.100这台主机 2.第一次登录选择"是(Y)",信任该主机,缓存该主机登录信息. 3.登录时,要输入正确的账户和口令,才能正常登录该主机. 下面使用putty和xshell演示如何使用密钥机制远程登录: 一.使用putty密钥认证机制登录 1.打开putty安装目录中的putty key generator软件,点击"Genera

Xshell使用密钥认证机制远程登录Linux

密钥认证是Linux下ssh服务支持的一种安全认证机制.它使用一对加密字符串,一个称为公钥(publickey),用于加密:另一个称为密钥(privatekey),只有创建者才能拥有使用,其用于解密.那么如何使用密钥认证登陆Linux呢? 1.下Xshell软件 在www.baidu.com搜索框内输入xshell,出现搜素结果后,点击高速下载或者普通下载,开始下载xshell软件. 2.安装xshell软件 Xshell支持多国语言版本,且可以免费获得.在安装时要注意选择免费版本,即"免费为家