话聊PAM

   今天小编来说说PAM,谈到这个他是Pluggable Authentication Modules的缩写,是 Sun公司于1995 年开发的一种与认证相关的通用框架机制,PAM 是关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开。使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,是一种认证框架,自身不做认证,认证库:文本文件,MySQL,NIS,LDAP等。怎么样高不高端,接下来小编将从它的认证原理,认证过程,相关文件,实现方式来介绍介绍PAM,当然也有模块演示。   

    pam认证原理

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

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

    PAM认证过程:

    1.使用者执行/usr/bin/passwd 程序,并输入密码

    2.passwd开始呼叫PAM模块,PAM模块会搜寻passwd程序的PAM相关设定文件,这个设定文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passed这个设置文件

    3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证

    4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)

    PAM认证机制

        PAM相关文件

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

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

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

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

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

          用配置文件/etc/pam.conf

             格式application type control module-path arguments

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

             格式type control  module-path  arguments

          说明:

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

             2. 模块类型(module-type)

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

             4. module-path 用来指明本模块对应的程序文件的路径名

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

     模块类型(module-type)

             1. Auth 账号的认证和授权

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

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

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

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

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

      两种方式实现简单和复杂

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

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

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

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

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

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

          2. 复杂详细实现:使用一个或多个“status=action”

                  [status1=action1 status2=action …]

                       Status:检查结果的返回状态

                       Action:采取行为 ok,done,die,bad,ignore,reset

                   ok  模块通过,继续检查

                   done 模块通过,返回最后结果给应用

                   bad 结果失败,继续检查

                   die 结果失败,返回失败结果给应用

                   ignore 结果忽略,不影响最后结果

                   reset 忽略已经得到的结果

          module-path: 模块路径

             1. 相对路径:

                /lib64/security目录下的模块可使用相对路径 如:pam_shells.so、pam_limits.so

             2. 绝对路径:

                  a.模块通过读取配置文件完成用户对系统资源的使用控制/etc/security/*.conf

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

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

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

        pam文档说明

           /user/share/doc/pam-*

            rpm -qd pam

            man –k pam_

            man 模块名 如man rootok

            《The Linux-PAM System Administrators' Guide》

              PAM模块示例

    v 模块:pam_securetty.so

    v 功能:只允许root

示例:允许root在telnet登陆

   /etc/pam.d/login

    #auth required pam_securetty.so #将这一行加上注释或者/etc/securetty文件中加入pts/0,pts/1…pts/n

     1. Pam   功能模块存放位置:                        

                        

wKiom1nO8c6Tx0e2AAHheUFYM9g173.png




                        2.配置文件

            

wKioL1nO8TOR8lJ5AAC_7gt0_is562.png

                        3.为每个应用模块提供配置文件:

        wKioL1nO8VHjF09xAAIWfhp_q4M438.png

                                 4. 调用过程:

        wKioL1nO8ZvjWc5JAAGqZ-6fAt8018.png        5. 介绍模块:

         5.1 用的shell/etc/shells      里就能登陆,否则就登陆不了

       wKiom1nO8oyimBAYAABOfxneg1c422.png 

   在该文件加上shells检测,required,一票否决

wKiom1nO8rqy4BJ7AAAM3WcBwWY000.pngwKioL1nO8nejrHWkAAFxA1vAPEI047.png

把该shell注释掉

         wKiom1nO8xmzfSTaAAAQK2azIPY103.png

         wKioL1nO8tbzjSMvAAA0Qs1Ydck406.png

                 现在发现该shell登陆不了

wKiom1nO83aDtwPLAABx0wR9J5o886.png

             5.2 本地登陆出现问题,更改 vim login

 

        wKioL1nO80WAQzYOAAAMhSEIQwE995.pngwKioL1nO85Gwu_F3AAEfH4-xqzg911.png

该终端注释掉 ,(如果上面改的不是login界面,将不受影响)

        wKiom1nO8_TCXdKuAAAQK2azIPY264.png

        wKioL1nO87HRshfTAAAzCq3xm3A044.png

在字符界面登陆不上

wKioL1nO9IqS3VZiAAAP5ks5laU554.png

日志会有记录

wKiom1nO9OrAw0BrAAG5AD_EpmM387.png

        2.  模块二:limit

        限制root安全登陆,在/etc/securetty里就能登陆,否则就登陆不了

root账户不能通过telnet登录上去

wKiom1nO9Pfz8X_xAAH665dQ1hY313.png

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

wKioL1nO9MGA1XvpAADMQ7jr9pw420.png

 

vi /etc/pam.d/login

#auth required pam_securetty.so #将这一行加上注释

 

wKioL1nO9M2QqXjpAAGq0k2BWCc603.png

 

        3. 模块:pam_nologin.so

v 功能:如果/etc/nologin文件存在,将导致非root用户不能登陆,如果用户shell/sbin/nologin时,当该用户登陆时,会显

/etc/nologin.txt文件内容,并拒绝登陆

查看一下该模块功能

wKiom1nO9RzzM7wiAAALaohu6iI417.png

touch该文件就会发现,用户登陆不了

wKioL1nO9OPzlXlCAAAUeK-cRhY874.png

普通用户登陆不了

wKiom1nO9TDBiRA7AABHRn6mbE0326.png

root用户可以登录

wKiom1nO9TqRJaoQAABgeEqlQXU794.png

如果该文件有内容,也会显示出来

wKioL1nO9QfDPBUdAADR6Hy7CDs781.png

 

root可以

wKiom1nO9Viz87qaAAAtzPNz8kI395.png

 

好了,现在可以删除/etc/nologin,要不然以后普通用户都登陆不了

wKiom1nO9Wjy2JimAAAXJCMCKFE985.png

                4. 模块:pam_limits.so

v 功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间

v 修改限制的实现方式:

ü (1)  ulimit 命令,立即生效,但无法保存

-n  最多的打开的文件描述符个数

-u  最大用户进程数

-S 使用 soft(软)资源限制

-H 使用 hard(硬)资源限制

ü (2) 配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf

v 配置文件:每行一个定义;

<domain> <type> <item> <value>

pam_limits.so

v <domain> 应用于哪些对象

ü Username 单个用户

ü @group 组内所有用户

ü所有用户

v <type> 限制的类型

ü Soft 软限制,普通用户自己可以修改

ü Hard 硬限制,root用户设定,且通过kernel强制生效

ü - 二者同时限定

v <item> 限制的资源

ü nofile 所能够同时打开的最大文件数量,默认为1024

ü nproc 所能够同时运行的进程的最大数量,默认为1024

v <value> 指定具体值

查看一下功能

wKioL1nO9VTQ1AuCAAAYE6tsYpg611.png

登陆之后使用资源,怎么控制:ulimit

wKioL1nO9VzgowxxAAE8F2t7UZU731.png

 

修改:

wKiom1nO9arxHP_lAAFQosVJVw8407.png

 修改配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf

限制用户进程数:

wKioL1nO9XKSHyy4AAGl1fuKq48784.png

查看运行进程:

wKiom1nO9cHjaMzKAAA3O5dfHfo295.png



好了,到此小编已经把PAM介绍完了,欢迎指错。













































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章