您的位置:首页 > 其它

安全之PAM认证

2017-05-02 10:43 155 查看


PAM

身份认证

资源限制 (Cgroup为更高级的资源限制手段)

=================================================================================

 

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

 的认证方式。PAM可以根据用户的网段、时间、用户名、密码等实现认证。并不是所有需要验证的服务都使用PAM来验证,如MySQL-Server就没有安

 装相应的PAM文件。

 

 例如需要PAM验证的服务: 本地(login、gdm、kdm), sshd, vsftpd,samba...

    # firefox /usr/share/doc/pam-1.1.1/html/Linux-PAM_SAG.html

=================================================================================

本节要点:

1. 了解PAM的作用

2. 理解PAM工作原理

3. 掌握常见的PAM模块应用

一、PAM认证的方式

Service(进程)   →      PAM(配置文件)             →            pam_*.so                →                  模块的配置文件

/usr/sbin/sshd          /etc/pam.d/sshd                        /lib64/security/pam_access.so     /etc/security/access.conf

                                                                           /lib64/security/pam_limits.so        /etc/security/limits.conf

                                                                           /lib64/security/pam_time.so         /etc/security/time.conf

/bin/su                   /etc/pam.d/su                            /lib64/security/pam_rootok.so     

例如sshd service:

[root@uplook ~]# ldd /usr/sbin/sshd |grep -i pam

 libpam.so.0 => /lib64/libpam.so.0 (0x00007f73f1895000)

 

[root@uplook ~]# grep -i pam /etc/ssh/sshd_config

UsePAM yes

[root@uplook ~]# vim /etc/pam.d/sshd

auth           sufficient      pam_rootok.so

二、PAM模块类型

PAM包括四种常见认证类型(module type): 技术面试,体检报告,人力面试,会话管理

auth   认证管理   验证使用者身份,账号和密码

account     用户管理   基于用户表、时间或密码有效期来决定是否允许访问

password 密码(口令) 认证管理 禁止用户反复尝试登录,在变更密码时进行密码复杂性控制

session  会话管理   进行日志记录,或者限制用户登录的次数,资源限制

三、PAM模块的流程控制(控制标记) 技术面试中多道题

Required (必要条件)  验证失败时仍然继续,但返回fail         用户不会知道哪里失败

Requisite (必要条件)  验证失败时则立即结束整个验证过程,返回fail     面试若不成功,马上失败,效率高

Sufficient (充分条件)  验证成功则立即返回,不再继续,否则忽略结果并继续  相当于面试中的拔高题

Optional (可选条件)      无论验证结果如何,均不会影响         通常用于session类型

Include           包含另外一个配置文件中类型相同的行

四、PAM应用示例

=================================================================================

模块:pam_rootok.so

功能:用户UID是0,返回成功

示例:限制root切换用户也需要密码

[root@uplook ~]# head -1 /etc/pam.d/su

#auth sufficient pam_rootok.so

 

示例:sshd不需要密码登录

[root@uplook ~]# head -1 /etc/pam.d/sshd

auth sufficient pam_rootok.so   

==========================================

模块:pam_access.so

功能:访问控制,默认配置文件/etc/security/access.conf

通常作用于登录程序,如su,login,gdm,sshd,例如限制用户从哪些网段登录sshd

示例:不允许root从192.168.1.0/24登录sshd

[root@uplook ~]# grep access.so /etc/pam.d/sshd

auth    required    pam_access.so

[root@uplook ~]# vim /etc/security/access.conf

-:root:192.168.1.0/24

-:root:ALL EXCEPT 192.168.1.0/24

示例:使用不同的模块配置文件

[root@uplook ~]# grep access /etc/pam.d/login

auth    required    pam_access.so accessfile=/accessfile2

[root@uplook ~]# grep uplook /accessfile2

-:uplook:tty5 tty6

==================================

[root@uplook ~]# grep access.so /etc/pam.d/sshd

auth    requisite    pam_access.so accessfile=/accessfile1

[root@uplook ~]# grep 110 /accessfile1

-:root:ALL EXCEPT 192.168.2.110

==========================================

模块:pam_listfile.so

功能:基于自定义文件允许或拒绝(黑名单或白名单)

示例:vsftpd黑名单或白名单

[root@uplook ~]# grep listfile /etc/pam.d/vsftpd

auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed 

                      

示例:sshd黑名单或白名单

[root@uplookt ~]# grep listfile /etc/pam.d/sshd

auth       required     pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail 

[root@uplook ~]# echo root > /etc/ssh_users

当/etc/ssh_users不存在时,fail

==========================================

模块:pam_time.so

功能:基于时间的访问控制,默认文件/etc/security/time.conf

示例:基于时间限制sshd的访问

[root@uplook ~]# grep time /etc/pam.d/sshd

account    required     pam_time.so

[root@uplook ~]# grep 0800

sshd;*;*;MoTuWeThFr0800-1100

==========================================

模块:pam_tally2.so

功能:登录统计

示例:实现防止对sshd暴力破解

[root@uplook ~]# grep tally2 /etc/pam.d/sshd

auth       required    pam_tally2.so deny=2 even_deny_root root_unlock_time=60 unlock_time=60

[root@uplook ~]# pam_tally2 --reset -u root

#auth     required         /lib64/security/pam_tally.so onerr=fail deny=2   lock_time=60

这里意思是每一次进行了错误的验证后,需要60秒钟后,才能再进行验证,但是错误验证了二次,将被系统永久锁定,除非管理员手动把错误验证的次数恢复成0,使用faillog -u user 可查看次数,使用faillog -u user -r 将错误次数重置为0

unlock_time可以允许帐户超过错误验证最大限制后,多长时间后可以继续访问(也就是自动解锁),

account     required      pam_tally.so reset  用户验证正确后,将错误次数重置为0

==========================================

模块:pam_limits.so

功能:限制用户会话过程中对各种资源的使用情况。缺省情况下该模块的配置文件是

/etc/security/limits.conf

/etc/security/limits.d/*.conf

缺省已使用,我们只需要调整相应限制值,如最大打开的文件数

xxxx: Too many open files

 

示例1:调整最大打开的文件数

[root@uplook ~]# ulimit -a

[root@uplook ~]# ulimit -n

1024

[jack@uplook ~]$ ulimit -n

1024

 

[root@uplook ~]# vim /etc/security/limits.conf

*                soft    nofile          10240

*                hard    nofile          10240

示例2:限制用户最大创建的进程数

[jack@uplook  ~]$ ulimit -u

1024

[jack@uplook  ~]# vim /etc/security/limits.d/90-nproc.conf

*          soft    nproc     10240

示例3:限制用户oracle最大使用CPU的时间 [可选]

[root@uplook ~]# vim /etc/security/limits.conf

oracle           hard    cpu             1

==========================================

[root@uplook ~]# vim /etc/security/limits.conf

#<item> can be one of the following:

#        - core - limits the core file size (KB)

#        - data - max data size (KB)

#        - fsize - maximum filesize (KB)

#        - memlock - max locked-in-memory address space (KB)

#        - nofile - max number of open files

#        - rss - max resident set size (KB)

#        - stack - max stack size (KB)

#        - cpu - max CPU time (MIN)

#        - nproc - max number of processes

#        - as - address space limit

#        - maxlogins - max number of logins for this user

#        - maxsyslogins - max number of logins on the system

#        - priority - the priority to run user process with

#        - locks - max number of file locks the user can hold

#        - sigpending - max number of pending signals

#        - msgqueue - max memory used by POSIX message queues (bytes)

#        - nice - max nice priority allowed to raise to

#        - rtprio - max realtime priority

==========================================

注:PAM资源限制仅针对用户,不针对进程

如果进程以root运行,会受到PAM的限制吗?

参考部分:查看进程文件是否支持PAM认证

[root@teacher ~]# which vsftpd

/usr/sbin/vsftpd

[root@teacher ~]# which sshd

/usr/sbin/sshd

[root@teacher ~]# which login

/bin/login

[root@teacher ~]# ldd /usr/sbin/vsftpd |grep pam

        libpam.so.0 => /lib/libpam.so.0 (0x00b67000)

[root@teacher ~]# ldd `which sshd` |grep pam

        libpam.so.0 => /lib/libpam.so.0 (0x00d0c000)

[root@teacher ~]# ldd `which login` |grep pam

        libpam.so.0 => /lib/libpam.so.0 (0x00a43000)

        libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x0050b000)

[root@teacher ~]# which mysql

/usr/bin/mysql

[root@teacher ~]# ldd `which mysql` |grep pam

=================================================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: