分享
 
 
 

使用 PAM 进行身份认证

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

---- 可插拔的认证模块(Pluggable Authentication Modules,即PAM)技术用于实现应用程序的认证机制。在 PAM出现之前,认证工作是由程序员来完成的,如果管理员需要改变认证的方式只有通过修改源程序才能完成。PAM 的出现彻底改变了这种局面,它提供了一个框架和一套编程接口,并且基于PAM应用程序的认证过程是通过配制文件来定义的,这样不仅将决定权交给了管理员,而且大大提高了使用灵活性。

----目前,PAM 技术已广泛应用于各种Unix系统,Linux中也使用了它。

一、PAM 的体系结构

---- 1.PAM的特点

---- 管理员可以选择从简单的密码到智能卡系统的认证方式,还可以为不同的程序配置不同的认证机制。PAM支持程序显示方式的需求,也支持为一个程序配置同时使用多种认证的机制。PAM让用户在使用多种认证机制时,不用为同一个口令敲入多次,并且还可在认证时输入多个口令,特别是当底层认证机制改变时,上层软件不需要修改;此外,PAM 提供一个可插拔的模型,能满足现有服务的需要。

----2.PAM的框架

---- PAM的核心实际上是一些库函数。PAM为用户提供一套调用应用程序的入口,即如果用户调用一个函数,告诉它您要认证即可,至于用哪一种机制认证由配置文件确定。用户通过查看返回值了解认证是否成功。

---- PAM有认证管理、账号管理、对话管理和密码管理4项功能。

---- 下面我们通过实例看看用PAM如何配置用户系统。

/etc/pam.d/login

#模块类型 控制标志 模块的名字 选项

#------- - --

auth required /lib/security/pam_securetty.so

auth required /lib/security/pam_pwdb.so

shadow nullok

auth required /lib/security/pam_nologin.so

account required /lib/security/pam_pwdb.so

password required /lib/security/pam_cracklib.so

password required /lib/security/pam_pwdb.so

nullok use_authtok shadow md5

sessionrequired /lib/security/pam_pwdb.so

session optional /lib/security/pam_console.so

---- 一个模块类型可以指定多个模块,通过依次被调用来验证用户的身份,这种工作方式叫做 Stacked Modules (堆迭模块)。上例中的 “控制标志”是指更改模块的工作方式。它可取的值如下:

---- required:必须的,该模块的认证必须通过,否则立即返回错误。

---- optional:可选的,表示可以忽略它的错误而继续下面一个模块。

---- sufficient:足够的,表示如果该模块认证成功,下面的模块不用调用,并立即返回认证成功,否则同optional。

---- 接下来,我们再来研究一下 login的 auth部分:

auth required /lib/security/pam_securetty.so

auth required /lib/security/pam_pwdb.so shadow nullok

auth required /lib/security/pam_nologin.so

---- 第1行指定使用pam_securetty.so,该模块的作用是让root只能在/etc/securetty中定义的tty 上登录;第2行指定使用pam_pwdb.so,它是一个用于处理标准的Unix口令用的模块,其参数shadow表明使用/etc/shadow,nullok是指允许空口令。第3行指定使用pam_nologin,该模块记录在/etc/nologin中,用户无法login。上述3个模块都是required,任何一个失败都会使得登录失败。

---- 3.口令的映射

---- 多层模块认证可能需要多个口令,用户可以使用同一个口令透过 mapping机制加强安全性,即通过一个口令来产生另一个口令,使一个口令可被多个模块使用。auth模块一般有下列选项:

---- use_first_pass:使用第一个模块要求输入的口令;

---- try_first_pass:先试着使用第一个模块要求输入的口令,若不对,需要用户重新输入;

---- use_mapped_pass:使用 password-mapping 得到口令,不再向用户提示要口令;

---- try_mapped_pass:先试着使用 password-mapping 得到口令,不再向用户提示要口令。

二、PAM 的应用

---- 下面, 我们结合实际配置来看看最常用的模块及其参数。

----1./etc/pam.d/passwd

auth required /lib/security/pam_pwdb.so shadow nullok

account required /lib/security/pam_pwdb.so

password required /lib/security/pam_cracklib.so retry=3

password required /lib/security/pam_pwdb.so

use_authtok nullok md5 shadow

---- 第2行指用于标准的Unix帐号管理,第3行和第4行表示修改口令。其中,pam_cracklib 用于检查新旧口令之间是否有足够的差别, retry=3 表示用户可以重试3次;最后一行是指pam_pwdb如何存储口令,use_authok是指让pam_pwdb使用pam_cracklib传进来的口令, md5 是指用md5算法进行处理,而shadow表示使用/etc/shadow。

---- Unix/Linux中的口令保存和验证方法是怎样的呢?最早的系统只简单地保存一份明文,后来只保存用单向算法处理过的口令。所谓单向算法通常是指分析一段信息产生一个长度固定的数据块,这个数据块通常称为报文分解值,其长度依所用算法而变化。这一过程是可重复但不可逆的,即用这段信息重复处理会产生相同的报文分解值,而根据一个报文分解值是无法反推出原信息的。所以,Unix保存的实际上是一个报文分解值。DES算法实际上是一个对称加密算法,它以用户的口令为密钥,使用一串0作为明文反复加密处理。受 DES密钥长度的限制,用户的口令不能超过 8个字符。需要指出的是,用户若使用2个随机产生的字符作为“盐粒”(salt)参与计算,可以避免有人事先算好一大堆密文进行比较而猜出口令。

---- 在 PAM中,缺省的加密算法是bigcrypt,它允许口令的最大长度为256个字符。用户也可以指定使用md5,md5的口令理论上是可以无限长的。请看md5处理过的口令:$1 $Z0I6bWw7$ypseV9VdQdyQ5h5ejTcbk1,其中,$1$ 表示它用 md5处理,Z0I6bWw7 是盐粒,第3个$后面的内容才是报文分解值。

----2./etc/pam.d/ftp

auth required /lib/security/pam_listfile.so item=user

sense=deny file=/etc/ftpusers onerr=succeed

auth required /lib/security/pam_pwdb.so shadow nullok

auth required /lib/security/pam_shells.so

account required /lib/security/pam_pwdb.so

session required /lib/security/pam_pwdb.so

---- 第1行是一个很常用的pam_listfile模块。其参数解释如下:

---- onerr=succeed | fail:指明在文件不存在或参数错误时如何处理; sense=allow | deny:指明满足所有条件时,是失败还是成功;

---- file=filename:指定一个列表文件;

---- item=user | tty | rhost | ruser | group | shell:指定文件中的每一行代表的含义、用户名和tty等;

----apply=user|@group:指明只对某个用户或某个组有效,即仅在item为tty、rhost 或 shell 时才有效。/etc/ftpusers 中的每一行是一个用户名,这些用户是不能通过认证的。如果文件不存在,则忽略这一行。第3行的含义是要求用户的shell列在/etc/shells中。

----3./etc/pam.d/reboot

---- auth sufficient /lib/security/pam_rootok.so

----auth required /lib/security/pam_console.so

----auth required /lib/security/pam_pwdb.so

----account required /lib/security/pam_permit.so

----第1行表示如果是root,那么用户不仅可以在本机操作,还可进行远程操作;第2行要求在控制台上操作;第3行要求用户必须知道自己所用账号的口令;第4行使用的pam_permit表示返回成功。

----/etc/pam.d/shutdown

----auth sufficient /lib/security/pam_rootok.so

----auth required /lib/security/pam_console.so

----auth required /lib/security/pam_pwdb.so

----account required /lib/security/pam_permit.so

----它同reboot用的是一样的。用户可以看一看 halt和 poweroff的配制,也是这样。

----上面,我们解释了一些最常用的模块。如果用户用的是 RedHat,可以参照/usr/doc/pam下的说明文件。事实上,还有许多模块是很有用的,它们在文档中都有说明。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有