南粤风采26选5历史记录:PAM的入门介绍

来源:互联网
更新时间:2018/2/9 2:39:39
责任编辑:王嘉善
字体:

广东26选5好彩2 www.jqf9.cn

PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。

PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等。

一、PAM的结构

PAM的整个框架结构如下图所示:

系统管理员通过PAM配置文件来制定认证策略,即指定什么服务该采用什么样的认证方法;应用程序开发者通过在服务程序中使用PAM API而实现对认证方法的调用;而PAM服务??椋╯ervice module)的开发者则利用PAM SPI(Service Module API)来编写认证??椋ㄖ饕且鲆恍┖齪am_sm_xxxx( )供libpam调用),将不同的认证机制(比如传统的Unix认证方法、Kerberos等)加入到系统中;PAM核心库(libpam)则读取配置文件,以此为根据将服务程序和相应的认证方法联系起来。

二、PAM支持的四种管理界面:

1、认证管理(authentication management)

主要是接受用户名和密码,进而对该用户的密码进行认证,并负责设置用户的一些秘密信息。

2、帐户管理(account management)

主要是检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等等。

3、密码管理(passWord management)

主要是用来修改用户的密码。

4、会话管理(session management)

主要是提供对会话的管理和记账(accounting)。

三、PAM的文件:

/usr/lib/libpam.so.* PAM核心库

/etc/pam.conf或者/etc/pam.d/ PAM配置文件

/usr/lib/security/pam_*.so 可动态加载的PAM service module

对于RedHat,其目录不是/usr/lib,而是/lib。

四、PAM的配置:

PAM的配置是通过单个配置文件/etc/pam.conf。RedHat还支持另外一种配置方式,即通过配置目录/etc/pam.d/,且这种的优先级要高于单个配置文件的方式。

1、使用配置文件/etc/pam.conf

该文件是由如下的行所组成的:

service-name module-type control-flag module-path arguments

service-name 服务的名字,比如telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务。

module-type ??槔嘈陀兴闹郑篴uth、account、session、password,即对应PAM所支持的四种管理方式。同一个服务可以调用多个PAM??榻腥现?,这些??楣钩梢桓鰏tack。

control-flag 用来告诉PAM库该如何处理与该服务相关的PAM??榈某晒蚴О芮榭?。它有四种可能的值:required,requisite,sufficIEnt,optional。

required 表示本??楸匦敕祷爻晒Σ拍芡ü现?,但是如果该??榉祷厥О艿幕?,失败结果也不会立即通知用户,而是要等到同一stack中的所有??槿恐葱型瓯显俳О芙峁祷馗τ贸绦???梢匀衔且桓霰匾跫?。

requisite 与required类似,该??楸匦敕祷爻晒Σ拍芡ü现?,但是一旦该??榉祷厥О?,将不再执行同一stack内的任何???,而是直接将控制权返回给应用程序。是一个必要条件。注:这种只有RedHat支持,Solaris不支持。

sufficient 表明本??榉祷爻晒σ丫阋酝ü矸萑现さ囊?,不必再执行同一stack内的其它???,但是如果本??榉祷厥О艿幕翱梢院雎???梢匀衔且桓龀浞痔跫?。

optional表明本??槭强裳〉?,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。

对于control-flag,从Linux-PAM-0.63版本起,支持一种新的语法,具体可参看Linux PAM文档。

module-path 用来指明本??槎杂Φ某绦蛭募穆肪睹?,一般采用绝对路径,如果没有给出绝对路径,默认该文件在目录/usr/lib/security下面。

arguments 是用来传递给该??榈牟问?。一般来说每个??榈牟问疾幌嗤?,可以由该??榈目⒄咦约憾ㄒ?,但是也有以下几个共同的参数:

debug 该??橛Φ庇胹yslog( )将调试信息写入到系统日志文件中。

no_warn 表明该??椴挥Π丫嫘畔⒎⑺透τ贸绦?。

use_first_pass 表明该??椴荒芴崾居没淙朊苈?,而应使用前一个??榇佑没抢锏玫降拿苈?。

try_first_pass 表明该??槭紫扔Φ笔褂们耙桓瞿?榇佑没抢锏玫降拿苈?,如果该密码验证不通过,再提示用户输入新的密码。

use_mapped_pass 该??椴荒芴崾居没淙朊苈?,而是使用映射过的密码。

expose_account 允许该??橄允居没У恼屎琶刃畔?,一般只能在安全的环境下使用,因为泄漏用户名会对安全造成一定程度的威胁。

2、使用配置目录/etc/pam.d/(只适用于RedHat Linux)

该目录下的每个文件的名字对应服务名,例如ftp服务对应文件/etc/pam.d/ftp。如果名为xxxx的服务所对应的配置文件/etc/pam.d/xxxx不存在,则该服务将使用默认的配置文件/etc/pam.d/other。每个文件由如下格式的文本行所构成:

module-type control-flag module-path arguments

每个字段的含义和/etc/pam.conf中的相同。

3、配置的例子

例一:用/etc/pam.conf配置默认的认证方式。

下面的例子将拒绝所有没有在/etc/pam.conf中明确配置的服务。OTHER代表没有明确配置的其它所有服务,pam_deny??榈淖饔弥皇羌虻サ鼐芫ü现?。

OTHER auth required /usr/lib/security/pam_deny.so

OTHER account required /usr/lib/security/pam_deny.so

OTHER password required /usr/lib/security/pam_deny.so

OTHER session required /usr/lib/security/pam_deny.so

例二:通过/etc/pam.d/rsh文件配置rsh服务的认证方式。

rsh服务认证用户时,先使用/etc/hosts.equiv和.rhosts文件的认证方式,然后再根据/etc/nologin文件的存在与否来判断是否允许该用户使用rsh,最后使用password database来认证用户。

auth required /lib/security/pam_rhosts_auth.so

auth required /lib/security/pam_nologin.so

account required /lib/security/pam_pwdb.so

session required /lib/security/pam_pwdb.so

例三:通过/etc/pam.conf配置ftpd的认证方式。

下面是ftpd服务利用PAM??榻杏没现さ娜霾街?。首先用pam_ftp??榧觳榈鼻坝没欠裎涿没?,如果是匿名用户,则sufficient控制标志表明无需再进行后面的认证步骤,直接通过认证;否则继续使用pam_unix_auth??槔唇斜曜嫉膗nix认证,即用/etc/passwd和/etc/shadow进行认证;通过了pam_unix_auth??榈娜现ぶ?,还要继续用pam_listfile??槔醇觳楦糜没欠癯鱿衷谖募?etc/ftpusers中,如果是则该用户被deny掉。

ftpd auth sufficient /usr/lib/security/pam_ftp.so

ftpd auth required /usr/lib/security/pam_unix_auth.so use_first_pass

ftpd auth required /usr/lib/security/pam_listfile.so /

onerr=succeed item=user sense=deny file=//img.xue163.net/etc/ftpusers

五、密码映射(password-mapping)

密码映射允许用户在不同的认证机制下使用不同的密码,其中有一个主密码(primary password),其它密码为次密码(secondary passwords,可能有多个)。主密码用来对次密码进行加密。在主密码认证通过后,认证??槔弥髅苈虢用芄拇蚊苈耄ㄒ渤莆猰apped password)解密,并对次密码进行认证。

注:如果使用了一次性密码的机制,就不使用密码映射。

所有服务??楸匦胫С秩缦?个映射选项(在第四部分已经简单解释过):

1、use_first_pass

这个选项指示本??椴荒芴崾居没淙朊苈?,而是使用已有的密码,即从第一个向用户提示输入密码的??槟抢锶〉妹苈?,并对该密码进行认证。

2、try_first_pass

这个选项指示本??槭紫瘸⑹允褂靡延械拿苈?,即从第一个向用户提示输入密码的??槟抢锶〉妹苈?,并对该密码进行认证。如果密码认证失败,则再提示用户输入密码。

3、use_mapped_pass

这个选项指示本??椴荒芟蛴没崾臼淙朊苈?,而应使用映射过的密码,即利用主密码将加密过的次密码解密出来并进行认证。

4、try_mapped_pass

这个选项指示本??槭紫瘸⑹允褂糜成涔拿苈?,即利用主密码将加密过的次密码解密出来并进行认证。如果密码认证失败,则再提示用户输入密码。

密码映射的例子:

下面是/etc/pam.conf中关于login服务的配置。这里login共有3种认证机制:Kerberos、UNIX和RSA认证,两个required控制标志表明用户必须通过Kerberos认证和UNIX认证才能使用login服务,optional选项则说明RSA认证是可选的。首先用户输入主密码进行Kerberos认证;use_mapped_pass选项指示UNIX认证??槔弥髅苈虢糜赨NIX认证的次密码解密出来并对该次密码进行认证;try_first_pass选项指示RSA认证??橄仁褂玫谝桓瞿?椋碖erberos??椋┑拿苈胱魑腥现さ拿苈?,当对该密码认证失败时才提示用户输入用于RSA认证的次密码。

login auth required pam_kerb_auth.so debug

login auth required pam_unix_auth.so use_mapped_pass

login auth optional pam_rsa_auth.so try_first_pass

六、PAM API

1、框架API:

任何一个支持PAM的服务程序在进行认证时必须以pam_start( )开始进行初始化,最后以pam_end( )结束以便进行清理工作。

2、认证管理API:

pam_authenticate( )对用户名/密码进行认证。

pam_setcred( )用来修改用户的秘密信息。

3、帐户管理API:

pam_acct_mgmt( )检查帐户本身是否有权限登录系统、帐户是否过期、帐户是否有登录时间限制等。

4、密码管理API:

pam_chauthtok( )修改用户的密码。

5、会话管理API:

一个会话以pam_open_session( )开始,最后以pam_close_session( )结束。

6、其它:

pam_get_item( )、pam_set_item( )用来读写PAM事务(transaction)的状态信息。

pam_get_data( )、pam_set_data( )用来取得和设置PAM??榧盎峄暗南喙匦畔?。

pam_putenv( )、pam_getenv( )、pam_getenvlist( )用来读写环境变量。

pam_strerror( )返回相关的错误信息。

例子程序(摘自Sun的白皮书):

下面的例子使用PAM API写了一个简单的login服务程序(注:这不是个完整的程序,所以省略了对pam_close_session的调用)。

#include

/* 回调函数 */

static int login_conv(int num_msg, struct pam_message **msg, struct pam_response **response, void *appdata_ptr);

struct pam_conv pam_conv = {login_conv, NULL};

pam_handle_t *pamh; /* 进行认证的PAM句柄 */

void main(int argc, char *argv[], char **renvp)

{

/* 初始化,并提供一个回调函数 */

if ((pam_start("login", user_name, &pam_conv, &pamh)) != PAM_SUCCESS)

login_exit(1);

/* 设置一些参数 */

pam_set_item(pamh, PAM_TTY, ttyn);

pam_set_item(pamh, PAM_RHOST, remote_host);

while (!authenticated && retry < MAX_RETRIES)

{

status = pam_authenticate(pamh, 0); /* 密码认证管理,检查用户输入的密码是否正确 */

authenticated = (status == PAM_SUCCESS);

}

if (status != PAM_SUCCESS)

{

fprintf(stderr,"error: %s/n", pam_strerror(pamh, status)); /* 显示错误原因 */

login_exit(1);

}

/* 通过了密码认证之后再调用帐户管理API,检查用户帐号是否已经过期 */

if ((status = pam_acct_mgmt(pamh, 0)) != PAM_SUCCESS)

{

if (status == PAM_AUTHTOK_EXPIRED)

{

status = pam_chauthtok(pamh, 0); /* 过期则要求用户更改密码 */

if (status != PAM_SUCCESS)

login_exit(1);

}

}

/* 通过帐户管理检查之后则打开会话 */

if (status = pam_open_session(pamh, 0) != PAM_SUCCESS)

login_exit(status);

/* 设置用户组 */

setgid(pwd->pw_gid);

/*

* Initialize the supplementary group access list before

* pam_setcred because PAM modules might add groups

* during the pam_setcred call

*/

initgroups(user_name, pwd->pw_gid);

status = pam_setcred(pamh, PAM_ESTABLISH_CRED);

if (status != PAM_SUCCESS)

login_exit(status);

/* 设置真实的用户ID(或者有效的用户ID)*/

setuid(pwd->pw_uid);

pam_end(pamh, PAM_SUCCESS); /* PAM事务的结束 */

/*

此处可用来实现与login有关的其它内容

*/

}

/* 出错则清理现场并退出 */

static void login_exit(int exit_code)

{

if (pamh)

pam_end(pamh, PAM_ABORT);

exit(exit_code);

}

/* 这个回调函数被PAM认证??榈饔靡员阆允敬砦笮畔⒒蛘呋蛘哂美慈〉糜没淙?,采用图形界面的服务程序则应使用图形界面来取得用户输入或显示提示信息*/

int login_conv(int num_msg, struct pam_message **msg, struct pam_response **response, void *appdata_ptr)

{

while (num_msg--)

{

switch (m->msg_style)

{

case PAM_PROMPT_ECHO_OFF:

r->resp = strdup(getpass(m->msg));

break;

case PAM_PROMPT_ECHO_ON:

(void) fputs(m->msg, stdout);

r->resp = malloc(PAM_MAX_RESP_SIZE);

fgets(r->resp, PAM_MAX_RESP_SIZE, stdin);

/* add code here to remove /n from fputs */

break;

case PAM_ERROR_MSG:

(void) fputs(m->msg, stderr);

break;

case PAM_TEXT_INFO:

(void) fputs(m->msg, stdout);

break;

default:

log_error();

break;

}

}

return (PAM_SUCCESS);

}

七、PAM SPI

当服务程序(ftpd、telnetd等)调用PAM API函数pam_xxx( )时,由PAM 框架(libpam)根据该服务在/etc/pam.conf文件中的配置调用指定的PAM??橹卸杂Φ腟PI函数pam_sm_xxx( )。如下:

API函数的名字为pam_xxx( ),对应的SPI函数的名字为pam_sm_xxx( ),即每个服务??樾枰鱿嘤Φ暮怨﹍ibpam调用。为方便对照,再列一下。

API 对应的 SPI

帐号管理 pam_acct_mgmt( ) pam_sm_acct_mgmt( )

认证管理 pam_authenticate( ) pam_ sm_authenticate( )

密码管理 pam_chauthtok( ) pam_ sm_chauthtok( )

会话管理 pam_open_session( ) pam_ sm_open_session( )

会话管理 pam_close_session( ) pam_ sm_close_session( )

认证管理 pam_setcred( ) pam_ sm_setcred( )

八、常用的PAM服务???

下面是Linux提供的PAM??榱斜恚ㄖ皇瞧渲幸徊糠郑?

??槲募???楣δ苊枋?相关配置文件

pam_access 提供logdaemon风格的登录控制 /etc/security/access.conf

pam_chroot 提供类似chroot命令的功能

pam_cracklib 对密码的强度进行一定的检查 库文件libcrack和字典文件

/usr/lib/cracklib_dict

pam_deny 总是无条件地使认证失败

pam_env 设置或取消环境变量 /etc/security/pam_env.conf

pam_filter 对输入输出流进行过滤 filters

pam_ftp.so 对匿名ftp用户进行认证

pam_group 当用户在指定的终端上请求指定的 /etc/security/group.conf

服务时赋予该用户相应的组权限

pam_issue 在提示用户输入用户名之前显示 /etc/issue

/etc/issue文件的内容

pam_krb4 对用户密码进行Kerberos认证 相应的Kerberos库文件

pam_lastlog 在用户登录成功后显示关于 /var/log/lastlog

用户上次登录的信息,并维护

/var/log/lastlog文件。

pam_limits 限制用户会话所能使用的系统资源 /etc/security/limits.conf

pam_listfile 根据指定的某个文件决定是否 例如/etc/ftpusers

允许或禁止提供服务

pam_mail 检查用户的邮箱中是否有新邮件 /var/spool/mail/xxxx

pam_mkhomedir 为用户建立主目录 /etc/skel/

pam_motd 显示/etc/motd文件的内容 /etc/motd

pam_nologin 根据/etc/nologin文件的存在与否 /etc/nologin

来决定用户认证是否成功

pam_permit 总是无条件地使认证成功

pam_pwdb 作为pam_unix_xxxx??榈囊桓鎏娲?。/etc/pwdb.conf

使用Password Database通用接口

进行认证。

pam_radius 提供远程身份验证拨入用户服务

(RADIUS)的认证

pam_rhosts_auth 利用文件~/.rhosts和 /etc/hosts.equiv和~/.rhosts

/etc/hosts.equiv对用户进行认证。

pam_rootok 检查用户是否为超级用户,如果

是超级用户则无条件地通过认证。

pam_securetty 提供标准的Unix securetty检查 /etc/securetty

pam_time 提供基于时间的控制,比如限制 /etc/security/time.conf

用户只能在某个时间段内才能登录

pam_unix 提供标准的Unix认证 /etc/passwd和 /etc/shadow

pam_userdb 利用Berkeley DB数据库来检查 Berkeley DB

用户/密码

pam_warn 利用syslog( )记录一条告警信息

pam_wheel 只允许wheel组的用户有超级用户

的存取权限

参考资料:

1、DCE/OSF-RFC 86.0

2、Linux-PAM documentation & source code

3、Sun Solaris PAM documentation

转自于 Xue163.com_Linux新手入门

根据您访问的内容,您可能还对以下内容感兴趣,希望对您有帮助:

求助pam stamp 2009的学习,0基础,不知怎样入门才...

答:从做例子开始,先做几个例子,再去看书,这样才有效果 光看书没用的 做例子就做help里面的 有examples的,很详细,做完后,再看看相关的 书籍 ,PAM的书有几本了,你可以看看。

在潘马斯的丰收中,除了最基础的Pam's harvest cra...

答:语法错乱,而且原版就有打草掉种子的设定。 推荐竹和豆腐。

以三段论的前提PAM和SEM推出的结论为基础,再进行...

答:首先可得出三段论的结论SEP,接着进行直接推理,可推出很多结论:1、SOP,2、¬(SAP),3、¬(SIP),4、PES,5、PA¬S,6、¬SIP,7、¬SO¬P,8、SA¬P,9、SI¬P,10、¬PIS,11、¬PO¬S。

如何判断PAC与PAM投加过量

PAM的使用方法以及用量的鉴定: 一、固相含量越高,絮凝剂使用的量越大。根据处理工艺要求的絮体大小选择絮凝剂的分子量。聚丙烯酰胺的离子型必须通过实验进行筛选。...

pam-crash和LS-dyna都是做高速下的碰撞分析,哪个做汽车碰撞...

一、明确跟你讲,两个软件都很牛,精通任何一个你都是牛人。相对来讲pamcrash更在汽车碰撞领域更专业一点,而ls-dyna则更通用一点,其实他们的核心算法都是一样的,都是dy...

星露谷物语pam在哪 潘姆喜好和行程介绍

星露谷物语中潘姆pam是游戏中十大可结婚对象之一潘妮penny的母亲,如果你想攻略penny,那么你就可以选择对她的妈妈也就是你未来的丈母娘下手,小伙伴们赶紧看看下面的潘...

越狱中Alex和Pam最后怎么了?

最后离婚了,Alex和他以前的女同事好了... 因为Alex的儿子死了,自然对他们夫妻之间的感情有很大的伤害,并且只要是继续相对的话,心上的痛是一直磨灭不了的,分开是很正常的...

PAM和PAC溶液的罐子使用什么材质

由于腐蚀性较强,一般采用聚丙烯材质的罐体!

PAM脉冲调幅信号是模拟还是数字信号

是PAM是模拟信号。 原因:区别模拟信号和数字信号的关键,是看携载消息的信号参量(如幅值、频率、相位)的取值是连续的还是离散的,而不是看时间,PAM信号尽管在时间上是...

Discovery系列记录片有一集介绍了PAM导弹(美国的精确攻击导...

discovery 巡航导弹A B两集 你去看看吧!

污水处理过程中什么情况下要加PAC与PAM,比例是多少?

PAC为聚合氯化铝,PAM为聚丙烯酰胺,前者为絮凝剂,后者为助凝剂,通常联合使用,一般情况下先加PAC,后加PAM,有时可能需要加酸或碱调节PH 配制浓度PAC10--15%,PAM0....

如何解决pam作为凝聚剂反应后粘度

聚丙烯酰胺溶液配置浓度: ≈0.15% 1. 准备 1.5 kg 阴离子聚丙烯酰胺固体,备用; 2. 将溶药罐内注入清水 1000L 左右; 3. 启动搅拌机,将 1.5kg 阴离子聚丙烯酰胺固体分批逐...

pam111在广州站西钟表城要多少钱才能买到高仿的 就是没什么...

手表有石英表和机械表,石英表无所谓买个100多的基本上都是日本机芯,质量还算可以主要看外壳还有做工?;当砭蜕畎铝?机芯有:国产垃圾机芯、国产高仿瑞士机芯、瑞士...


广东26选5好彩2 www.jqf9.cn true //www.jqf9.cn/soft/18/187504.html report 17357 PAM的入门介绍,PAM(PluggableAuthenticationModules)是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无...
网友评论
最新添加资讯
    24小时热门资讯
    娱乐时尚
      科技资讯
      历史文化
        真视界
        旅游美食
        精彩图文
        我爱我车
        母婴健康
        关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
        Copyright © 2004-2018 www.jqf9.cn All Rights Reserved. 学网 版权所有
        京ICP备10044368号-1 京公网安备11010802011102号
        教育考试: 学历财经建筑 医药公考资格外语电脑作文招聘中小学留学 文档 移民 文库专栏23问答中心问答图书馆知识IT编程数码信息解决方案信息中心IT科技topzttophottopsctopnew问答新闻中心软件教室设计大全网络相关英语学习开发编程考试中心参考范文管理文库营销中心站长之家IT信息中心商学院数码大全硬件DIY企业服务网吧在线百科硬件知识手机平板汽车游戏家电精彩摄影现代家居IT女人经验健康养生猎奇创业攻略教育学习历史时尚潮流广东26选5好彩2涨知识
      • 印度亮出底牌武器威慑中国,解放军应对手段相当硬气:中国不怕 2018-09-10
      • 羌族“独腿女孩”尔玛阿依有望配假肢登舞台 2018-09-10
      • 价值-热门标签-华商生活 2018-08-17
      • 乐智起航 赢在未来 艾美卡特兰乐高主题活动圆满落幕 2018-08-17
      • 301| 649| 277| 667| 159| 723| 977| 206| 648| 659|