PAM模块验证机制

一、Linux用户登录系统验证步骤

1)首先在命令行输入用户名密码

2)系统去找/etc/passwd这个文件,根据用户名去找到用户的uid、gid、家目录和shell

wKioL1biiL2RuyiTAAAlFDt0fVA091.png

(3)系统去找/etc/shadow文件,该文件记录用户uid和密码的关系,根据用户名得到相应的

     密码。

(4)当系统得到的密码和用户输入的密码一致时,系统将会给用户一个shell,进入shell控

     制阶段。但并不意味着登陆成功,用的用户对应的shell为/bin/nologin,此用户被禁止

     登陆,但是可以进行其他工作。系统在/etc/nologin.txt中记录用户不能登录的原因。

(5)进行PAM验证,必须通过PAM验证,最终才能登陆成功。

二、关于PAM的详细阐述。

(1)PAM验证原理

当一个服务器请求PAM模块的时候,PAM本身是不提供服务验证的,PAM 会调用一群模块来

进行服器的验证,模块存放在/lib/security中,具体的哪个服务调用哪一个模块由PAM

的服务文件定义的,服务文件存放在/etc/pam.d目录下。

(2)PAM的配置服务文件

以前的PAM版本使用的PAM配置服务文件是/etc/pam.conf文件,但是现在这个已经过时。

现在的服务文件存放在/etc/pam.d/目录之下,目录中每个文件的名称和他们所控制访问

的服务名称是相同的。

例如,login程序定义的服务名为login,并生成/etc/pam.d/login的配置服务文件。

PAM模块验证机制_第1张图片

(3)配置服务文件的格式

     <module interface> <control flag> <module name> <module arguments>

(a)模块接口<module interface>

  Auth(认证管理):对用户的身份进行识别(如:识别是否为root用户;)

  Account(账号管理):对账号的属性进行检查.(是否允许登录,是否达到最大用户数)

  Session(绘画管理): 这个模块用来定义用户登录前的,及用户退出后所要进行的操作.

                         (如:登录连接信息,用户数据的打开与关闭,挂载文件系统等)

 Password(密码管理): 使用用户信息来更新.(如:修改用户密码.)

(b)控制标志旗 <control flag>

   主要的作用是利用它来处理和判断各个模块的返回值。

 Required:表示需要模块返回一个成功值,如失败则继续进行同类型的下一个操作,当所有

           此类型的模块都执行完之后,才返回失败值。

 Requisite与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表

             示此类型失败再进行同类型后面的操作。

 Sufficient:如果此模块返回成功,则直接向应用程序返回成功,表示此类型成功.不再进行

              同类型后面的操作.如果失败,也不会影响这个类型的返回值.

 Optional使用这个标记的模块,将不进行成功与否的返回.一般返回一个PAM_IGNORE

(c)模块名 <module name>

  常用的PAM模块:

         pam_access.so      控制访问者的地址与帐号的名称

         pam_listfile.so       控制访问者的帐号名称或登陆位置

         pam_limits.so       控制为用户分配的资源

         pam_rootok.so      对管理员(uid=0)无条件通过

         pam_userdb.so      设定独立用户帐号数据库认证

         pam_deny.so        用来拒绝用户访问,只返回一个值

         Pam_env.so用来配置任意的环境变量

(d)模块参数<module arguments>

        作用是给模块进行参数的传递,参数可以用空格隔开

         password   required   pam_unix.so nullok obscure min=4 max=8 md5

(e)模块的路径

         表示服务配置文件要调用的模块的存放位置,一般保存在/lib/security下

三、举例说明PAM的验证流程。

     密码验证流程如下:

     1、执行/usr/bin/passwd并输入密码 

     2、系统在服务文件目录下找到passwd配置文件调用PAM模块,读取/etc/pam.d/passwd配置文件并加

        载相应.so文件,对输入的密码进行验证。 

     3、将验证结果传回passwd程序 

     4、passwd这个程序会根据PAM回传的结果来决定下一个操作。

 

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

    结束以便进行清理工作


四、总结。

  /etc/pam.d/*:服务配置文件存在目录

  /lib/security/*:真正的模块存在目录。


本文出自 “Chan_Yeol” 博客,谢绝转载!

你可能感兴趣的:(PAM模块认证)