HOME 生活记录运维/编程
作者/来源:yixinu.com
栏目:运维/编程
日期:2012-05-09 05:32:59

plugins authentication modules 插入式验证模块



   查 vsftpd 调用了哪些动态链接库

[user1@b155 pam.d]$ ldd /usr/sbin/vsftpd
        linux-gate.so.1 =>  (0x00173000)
        libssl.so.10 => /usr/lib/libssl.so.10 (0x00174000)
        libwrap.so.0 => /lib/libwrap.so.0 (0x00911000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x001dd000)
        libpam.so.0 => /lib/libpam.so.0 (0x00c69000)
        libcap.so.2 => /lib/libcap.so.2 (0x00ba7000)
        libdl.so.2 => /lib/libdl.so.2 (0x0013b000)
        …………

   查看帮助  


[user1@b155 pam.d]$ man -k pam_
/$LIB/security/pam_krb5/pam_krb5_storetmp [pam_krb5_storetmp] (8)  - Temporary file helper
group.conf [group]   (5)  - configuration file for the pam_group module
limits.conf [limits] (5)  - configuration file for the pam_limits module
pam-panel-icon       (1)  - A notification area indicator of pam_timestamp status
pam_access           (8)  - PAM module for logdaemon style login access control
pam_ck_connector     (8)  - Register session with ConsoleKit
pam_console          (8)  - determine user owning the system console
pam_console_apply    (8)  - set or revoke permissions for users at the system console
pam_cracklib         (8)  - PAM module to check the password against dictionary words
pam_debug            (8)  - PAM module to debug the PAM stack
pam_deny             (8)  - The locking-out PAM module
pam_echo             (8)  - PAM module for printing text messages
pam_ecryptfs         (8)  - PAM module for eCryptfs
…………





example:

   vim  /etc/pam.d/sshd


#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth

 



PAM  文件测试 


       测试分为4组  ,并不是所有的模块都支持这四组测试

                    auth    认证用户是否为此用户    验证

                    account   用于给用户授权     统计

                    password   控制密码修改    

                    session   打开、断开并记录会话    会话


        检测顺序是由上往下逐条检测,例:

        过程:输入用户名、验证用户是否有权限、验证密码、记录会话


PAM   文件控制值:

        required        必须通过测试,如果失败了仍然继续后续测试    

        requisite        与required类似,与它不同的是,requisite如果失败了立即停止测试

        sufficient        如果通过测试,立即返回成功状态,如果失败忽略测试结果,继续测试

        optional        测试是否通过都不作出反应,无关紧要

        include        从包含的配置文件中放回测试结果


---------------------------------------------------------------

example 1 :   pam_securetty

    限制root用户登录到指定终端,但并不会影响到其它用户


1、编辑文件   /etc/pam.d/login ,修改 

auth  required  pam_securetty.so debug 



[root@b155 pam.d]# vim login
#%PAM-1.0
#auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so    #注释这一行
auth  required  pam_securetty.so debug      #添加这一行 ,注意 这里是加了 debug 参数
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth


2、编辑  /etc/securetty 文件 ,root只能在文件中有的终端登录  ,#为注释,注释掉某一行,root将不能从那个终端登录

    vim /etc/securetty 
[user1@b155 pam.d]$ sudo vim /etc/securetty
[sudo] password for user1:
console
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
tty1
…………



example 2 :    pam_nologin

      Prevent non-root users from login   阻止非root用户来登录


 模块参数:  file  文件名


1、编辑文件


[root@bogon pam.d]# vim login
……
auth required pam_nologin.so file=/etc/mynologin    添加这一行


2、添加空文件 /etc/mynologin 之后, 所有的用户将不能登录 



example 3 :    pam_listfile

     pam_listfile - deny or allow services based on an arbitrary file   基于一个文件拒绝或允许服务


 模块参数:

    item    用户名 、终端名、 远程主机名

    sense    allow or  deny

    file     文件列表名

    onerr    当遭遇错误的时候,比如这个file不存在,或者给定的参数错误,如果 onerr=succeed 就反回成功的结果  ,如果 onerr=fail 就返回一个错误或服务错误 的结果 


以ssh服务为例


sense=allow

[root@bogon pam.d]# vim sshd
auth required  pam_listfile.so item=user sense=allow file=/etc/pam_file_list onerr=succeed

添加空文件   /etc/pam_file_list

     此时,不在这个文件列表中的用户都无法远程登陆



login as: xianglou
Access denied
xianglou@192.168.0.101's password:
Access denied
xianglou@192.168.0.101's password:


sense=deny

[root@bogon pam.d]# vim sshd
auth required  pam_listfile.so item=user sense=deny file=/etc/pam_file_list onerr=succeed

     此时,只有在这个文件列表中的用户才无法登陆,因为文件为空,所以所有用户都是可以登陆的



login as: xianglou
Access denied
xianglou@192.168.0.101's password:
Last login: Wed May  9 07:04:22 2012 from 192.168.0.100
[xianglou@bogon ~]$



example 4 :    pam_cracklib


    pam_cracklib - PAM module to check the password against dictionary words    检测密码基于字典的单词,也就是检测密码是否为弱密码


模块选项参数 :

    debug    记录消息到系统日志

    retry=N   输入错误允许的次数   默认为1

    difok=N   默认值为5  ,新密码中间至少有N个字符必须在老密码之间不存在

    minlen=N   最小长度

    


只能写在password测试环节



example 5 :    pam_tally2


    pam_tally2 - The login counter (tallying) module     登陆计数模块

     This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail.

    这个模块维护了一个尝试访问的计数器,也可以重置登陆计数,也可以拒绝访问如果有太多的失败的尝试


模块参数选项:

    onerr = succeed  or fail     如果有些事情特别奇怪的时候 比如说有些文件打不开的时候 

    file    这个文件保存计数

   认证选项

    deny=n     超过这个值的时候,拒绝访问

    lock_time=n     在尝试失败以后,锁定为多少秒 内不能登陆

    unlock_time=n    在尝试失败以后,多少秒以后才可以访问,与上面相同

    magic_root   如果这个选项调用了,用户uid为0,计数器将不增加

    even_deny_root    root  帐户变得不可用

    root_unlock_time=n    root帐户锁定多少秒后才可以登陆



example 6 :    pam_limits   

        对资源做强制限制

        这个模块设置系统资源值限制,通过用户获取资源,用户ID为0也受影响,默认的限制从  /etc/security/limits.conf  这个文件中提取,还有从  /etc/security/limits.d/ 这个目录中的   *.conf 的文件,这个模块不能被多线程的应用程序调用


    用在  session 这个测试环节中

   

模块选项参数:

    

配置文件语法为:     /etc/security/limits.conf    


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

    domain:   用户名 或 组名  ,组名前加  @   @group

    type:   hard   or   soft  or  -(包括两者)

    item:    

             data
               maximum data size (KB)
           fsize
               maximum filesize (KB)
           memlock
               maximum locked-in-memory address space (KB)
           nofile
               maximum number of open files    最多能打开多少个文件 
           rss
               maximum resident set size (KB) (Ignored in Linux 2.4.30 and higher)
           stack
               maximum stack size (KB)   
           cpu
               maximum CPU time (minutes)
           nproc
               maximum number of processes    最大打开多少个执行程序
           as
               address space limit (KB)
           maxlogins
               maximum number of logins for this user except for this with uid=0
           maxsyslogins
               maximum number of all logins on system


    配置用户  user1  只能打开5个应用程序   登录3个终端


#@student        -       maxlogins       4
user1            -       maxlogins       3
user1            -       nproc           5


    超过了限定值,提示  资源暂时不可用

[user1@b155 ~]$ ps -aux | grep user1
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root     13532  1.8  0.6  11396  3408 ?        S    14:58   0:00 sshd: user1 [priv]
user1    13537  0.0  0.2  11396  1492 ?        S    14:58   0:00 sshd: user1@pts/1
user1    13538  0.5  0.3   6716  1588 pts/1    Ss   14:58   0:00 -bash
user1    13561  3.0  0.5  12740  2708 pts/1    T    14:58   0:00 vim
user1    13562  2.0  0.2   6524  1028 pts/1    R+   14:58   0:00 ps -aux
user1    13563  0.0  0.1   5952   732 pts/1    S+   14:58   0:00 grep user1

[1]+  Stopped                 vim
[user1@b155 ~]$ vim &
[2] 13565
[user1@b155 ~]$ vim &
[3] 13566

[2]+  Stopped                 vim
[user1@b155 ~]$ ps -aux | grep user1
-bash: fork: retry: 资源暂时不可用



example 7 :    pam_echo

    打印消息 

    pam_echo.so  file=/path/filename

    可用在所有测试环节


////////////

    登陆时打印消息 


auth optional   pam_echo.so file=/etc/test.txt



login as: user1
Access denied
user1@202.202.2.155's password:
*************************************************************************
*                                                                       *
*                                                                       *
*                                                                       *
*                                                                       *
*                                                                       *
*                                                                       *
*                                                                       *
*                                                                       *
*************************************************************************
Last login: Thu May 10 15:17:49 2012 from 202.202.4.44
[user1@b155 ~]$



example 8 :    pam_exec

    调用一个外部程序    



//////////////


vim sshd
auth optional pam_exec.so mkdir /tmp/aa

登录
login as: user1
Access denied
user1@202.202.2.155's password:
命令执行失败
mkdir failed: exit code 2
Last login: Thu May 10 15:18:17 2012 from 202.202.4.44
[user1@b155 ~]$


example 8 :    pam_lastlog

    该模块显示最后一次登陆的日期

    pam_lastlog.so   [debug] [silent] [never] [nodate] [nohost] [noterm] [nowtmp] [noupdate] [showfailed]


日志文件    /var/log/lastlog  ,查看该文件  指令  lastlog


[root@b155 ~]# ls /var/log/lastlog 
/var/log/lastlog
[root@b155 ~]# lastlog
Username         Port     From             Latest
root             pts/0    202.202.4.44     Thu May 10 16:25:01 +0800 2012
bin                                        **Never logged in**
daemon                                     **Never logged in**
adm                                        **Never logged in**
lp                                         **Never logged in**
sync                                       **Never logged in**
shutdown                                   **Never logged in**
…………


    该模块只用在  session 测试环节中



example 9 :    pam_localuser

    只能使用本地用户登陆  ,不能使用  比例LDAP远程用户之类的



example 10 :    pam_rootok       只允许root用户登陆  


example 11 :    pam_shells

    这个模块检测有效的登陆shell

    仅仅允许访问系统的时候,如果用户的shell是列在这个清单里面 /etc/shells , 同是检测这些文件 是不是明文的,是不是所有人都可写





未完

分享到:

Copyright © 2013-2014 yixinu.com 湘ICP备14004402号

QQ:316686606  Email: 316686606@qq.com