zoukankan      html  css  js  c++  java
  • linux-PAM

    PAM(Pluggable Authentication Modules)即可插拔式认证模块,一种用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。

    PAM认证原理:参考资料来自http://blog.51cto.com/tyjhz/1436175

      一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so。PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib/security下)进行安全认证。认证原理图如下图所示:

    wKioL1O8rY-C0rOsAADFEPrJxgE391.jpg

      用户访问服务器的时候,服务器的某一个服务程序把用户的谁请求发送到PAM模块进行认证。对于不同的服务器应用程序所对应的PAM模块也是不同的。如果想查看某个程序是否支持PAM认证,可以用ls /etc/pam.d/命令进行查看,例如查看查看sshd是不是支持PAM模块认证,如下图所示:

    wKioL1O8rafjqe11AAOW--_vknY241.jpg

    PAM配置文件

    1、/etc/pam.conf,但centos6之后的系统中,这个文件就没有了。
    2、/etc/pam.d/*,每个文件对应一个应用如:/etc/pam.d/sshd 

    PAM配置文件格式

    由上图可以将配置文件分为四列,依次是:模块类型、控制标记、模块路径、模块参数。

    第一列代表模块类型:四种常见认证类型(module type)

    认证类型(module type) 说明
    认证管理(authentication management) 用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root等.
    帐户管理(account management) 对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等。
    密码管理(password management) 主要是用来修改用户的密码。
    会话管理(session management) 这个模块用来定义用户登录前的及用户退出后所要进行的操作,主要是提供对会话的管理和记账(accounting)。如:登录连接信息,用户数据的打开与关闭,挂载文件系统等.

    第二列代表控制标记“Control Flags”:参考资料来自http://blog.51cto.com/tyjhz/1436175

    验证控制类型也可以称做Control Flags,用于PAM验证类型的返回结果,具体有以下四种:

    1、required验证失败时仍然继续,但返回Fail(用户不会知道哪里失败)。

    2、requisite验证失败则立即结束整个验证过程,返回Fail。

    3、sufficient验证成功则立即返回,不再继续,否则忽略结果并继续。

    4、optional无论验证结果如何,均不会影响(通常用于session类型)。

    PAM验证类型返回结果如下所示:

    wKioL1O8rb2zaxXqAAEUlXRlfMk934.jpg 

    为了方便大家理解举两个例子,如下图所示:

    wKioL1O8rczBg2EFAADgmbEnOKA947.jpg 

    wKioL1O8rd3idhFdAADjDU7b4ao203.jpg 

    从上面两个图可以看出当required失败后续还要继续,但最后仍是失败。requisite验证失败则立即结束。而sufficient则是验证成功则立即结束。

    第三列代表调用模块路径:参考资料来自http://blog.51cto.com/tyjhz/1436561

    下面是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 检查用户是否为超级用户,如果是超级用户(uid=0)则无条件地通过认证。

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

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

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

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

    pam_userdb 利用Berkeley DB数据库来检查用户/密码

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

    pam_wheel 只允许wheel组的用户有超级用户的存取权限

    第四列代表模块参数:非必要可不填

    pam认证的应用

    1、案例1(pam_access.so)

    现有一账号user1 只允许192.168.2.1 ssh登录

    (1)安装pam

    [root@huangzhong ~]# mount /dev/cdrom /media/cdrom/

    [root@huangzhong ~]# cd /media/cdrom/Packages/

    [root@huangzhong Packages]# ll |grep pam  //过滤与pam相关的包

    [root@huangzhong Packages]# yum install pam-1.1.1-13.el6.x86_64.rpm 

    (2)因为限制ssh登录,所以这里要用到sshd模块,因此要编辑/etc/pam.d/

    [root@huangzhong ~]# cd /etc/pam.d/

    [root@huangzhong pam.d]# vim sshd

    wKioL1O99geDnjwxAAEsEWCM8KQ180.jpg 

    (3)编辑access.so模块的配置文件

    [root@huangzhong pam.d]# vim /etc/security/access.conf

    wKiom1O99kOyF4J8AAEQy_4PWCs495.jpg 

    (4)测试验证

    //新建user1用户

    [root@huangzhong ~]# useradd user1

    [root@huangzhong ~]# passwd user1

    Changing password for user user1.

    New password: 

    BAD PASSWORD: it is WAY too short

    BAD PASSWORD: is too simple

    Retype new password: 

    passwd: all authentication tokens updated successfully.

    //在本地ssh登录测试结果如下:

    wKioL1O99iCxHyvSAAE_p75laq8564.jpg 

    //在192.168.2.1上ssh登录,结果如下:

    wKioL1O99jWwnVwhAAFKjGHwVFY724.jpg

    wKiom1O99p3w-U4bAAGaakCIVJA799.jpg

    在这里也可以通过查看日志信息,查看登录的结果,所要查看的日志是:

    [root@huangzhong ~]# tail -f /var/log/secure

    2、案例2(pam_listfile.so)

    在对Linux服务器进行管理时,只允许manager组的用户可以管理,是通过ssh管理。

    (1) 因为限制ssh登录,所以这里要用到sshd模块,因此要编辑/etc/pam.d/

    [root@huangzhong ~]# cd /etc/pam.d/

    [root@huangzhong pam.d]# vim sshd

    wKiom1O99rOhiLOjAAFcdUKZW_8451.jpg 

    (2) 创建manager组,并编辑一些用户

    [root@huangzhong pam.d]# vim /etc/manager

    wKioL1O99o7zpLl_AABP8bvWow8222.jpg 

    //创建用户user2和user3,并给予口令

    wKiom1O99sfAGSSpAALjbStWNoI350.jpg 

    (3) 登录测试

    使用user1登录测试

    wKioL1O99qaAr8WsAAKrgIVt0Ek023.jpg 

    使用user2和user3登录测试结果如下:

    wKiom1O99u3xNuPsAAHpWXa9fWQ638.jpg 

    3、案例3(pam_limts.so)

    限制user1,ssh在线的登陆次数为2次

    (1) 因为限制ssh登录,所以这里要用到sshd模块,因此要编辑/etc/pam.d/

    [root@huangzhong ~]# cd /etc/pam.d/

    [root@huangzhong pam.d]# vim sshd

    wKiom1O991KBecA5AADBs4DQDHQ585.jpg 

    (2) 编辑/etc/security/limits.conf  文件

    [root@huangzhong pam.d]# vim /etc/security/limits.conf 

    wKiom1O99z6BKsHtAADW-mWEWcs934.jpg 

    (3) 登录测试

    使用user1登录3次测试结果如下:

    wKioL1O99zOx8ObTAAGadsiwi8Y844.jpg 

    查看日志信息如下:

    [root@huangzhong pam.d]# tail -f /var/log/secure

    wKiom1O9923BIU9MAARyk0PASS4476.jpg 

  • 相关阅读:
    JS经典面试题
    javascript数组(1) ——sort的工作原理及其他数组排序方法
    怎么去掉javascript 的Array的重复项
    Intellij IDEA运行Error ——Command line is too long
    angular-waring:global Angular与local Angular版本不一致问题
    idea(集成python)下载python插件失败
    PLSQL登录oracle显示无监听或协议适配器错误
    maven不能加载ojdbc6.jar的解决方法
    eclipse安装maven插件
    windows下gitbash安装教程
  • 原文地址:https://www.cnblogs.com/wxxjianchi/p/10364409.html
Copyright © 2011-2022 走看看