Linux-PAM认证方式

在linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合必定的要求以后才容许执行,例如login, su等linux

在linux中进行身份或是状态的验证程序是由PAM来进行的,PAM(Pluggable Authentication Modules)可动态加载验证模块,由于能够按须要动态的对验证的内容进行变动,因此能够大大提升验证的灵活性。sql

linux各个发行版中,PAM使用的验证模块通常存放在/lib/security/目录下,可使用ls命令进行查看本计算机支持哪些验证控制方式,通常的PAM模块名字例如pam_unix.so,模块能够随时在这个目录下添加和删除,这不会直接影响程序运行,具体的影响在PAM的配置目录下。vim

PAM的配置文件通常存放在/etc/pam.conf文件,或者/etc/pam.d/目录下。不过如今通常都会存放在/etc/pam.d/目录下,之下是相对于每一个须要被PAM控制的程序的独立配置文件。当一个程序的验证方式配置在pam.conf和pam.d/下某文件中出现时,以pam.d/目录下文件为准session

查看某个程序是否支持PAM,使用命令:
  
  
           
  
  
  1. #ldd `which cmd` | grep libpam  //cmd就表明查看的程序名
若是包含libpam库,那么该程序就支持PAM验证。

举个不是特别恰当的例子:PAM机制就至关于给一个房屋安装防盗门,也就是对要进入这间屋子的人进行控制,不让这间屋子处于一种任何人均可以随便进入的状态。ide

  1. 支持PAM验证呢,就是表示这屋子给安装防盗门预留了空位,
  2. 不支持PAM呢,就是说房子整个就是封闭的,人根本进不了,或者是房子基本没有墙,不须要对出入进行限制。
  3. 在PAM机制中,PAM模块就至关因而防盗门上能够安装的各类锁具,这些锁具各有不一样的特色和功能,你能够按须要安装。
  4. 相同的,在PAM中,程序的配置文件就至关于这个防盗门的制做和安装方案,安在什么地方,在支持的各类锁具中选择合适的锁,而后是开这些锁的前后顺序等这些具体使用规范。

PAM的各类模块是开发人员预先开发好的,而咱们要作的是合理的使用这些模块,让它们保护须要保护的程序。因此要关注的是PAM的配置文件目录/etc/pam.d/测试

拿例子说事,以login这个登陆程序为例子,文件名是/etc/pam.d/login,内容是(其中一部分):
 
  
  
           
  
  
  1. auth     optional     pam_faildelay.so    delay=3000000  
  2. auth     required     pam_securetty.so  
  3. auth     requisite    pam_nologin.so  
  4. session    [success=ok ignore=ignore module_unknow=ignore default=bad]    pam_selinux.so close 
  5. @include  common-auth 
从上面能够看出来,配置文件是按行指定的,每一行是一个完整的定义。
 
通常第一列指定的内容是:module-type,一共就只有4种,分别是:
  1. auth:对用户身份进行识别,如提示输入密码,判断是root否;
  2. account:对帐号各项属性进行检查,如是否容许登陆,是否达到最大用户数;
  3. session:定义登陆前,及退出后所要进行的操做,如登陆链接信息,用户数据的打开和关闭,挂载fs;
  4. password:使用用户信息来更新数据,如修改用户密码。
第二列内容是:control-flag,有不少,不过通常经常使用的是4种,分别是:
  1. optional:不进行成功与否的返回,通常返回一个pam_ignore;
  2. required:表示须要返回一个成功值,若是返回失败,不会马上将失败结果返回,而是继续进行同类型的下一验证,全部此类型的模块都执行完成后,再返回失败;
  3. requisite:与required相似,但若是此模块返回失败,则马上返回失败并表示此类型失败;
  4. sufficient:若是此模块返回成功,则直接向程序返回成功,表示此类成功,若是失败,也不影响这类型的返回值。
第三列内容是PAM模块的存放路径,默认是在/lib/security/目录下,若是在此默认路径下,要填写绝对路径。
第四列内容是PAM模块参数,这个须要根据所使用的模块来添加。
 

 
实际操做:如今对linux系统的登陆程序login进行针对用户和时间的登陆限制。
使用模块pam_time.so
 
一、检查login程序是否支持PAM
  
  
           
  
  
  1. root@hdp0:~# ldd `which login` | grep libpam  
  2.     libpam.so.0 => /lib/libpam.so.0 (0xb76e2000)  
  3.     libpam_misc.so.0 => /lib/libpam_misc.so.0 (0xb76de000) 
二、在/etc/pam.d/下修改login配置文件
在login配置文件中,在auth的定义以后,加入account的一条验证
account     requisite     pam_time.so
 
三、pam_time.so这个模块须要定义另一个配置文件time.conf
在/etc/security/time.conf中定义限制的具体用户和时间
  
  
           
  
  
  1. vim /etc/security/time.conf  
  2. login;tty3;fenix;Th2100-2300     //做用程序是login,做用在tty3上,fenix容许在周四2100-2300间登陆  
  3. login;!tty3;!fenix;!Th2100-2300  //做用程序是login,做用在tty3之外,对用户fenix以外产生影响,容许登陆时间是周四2100-2300以外 

四、对PAM的应用是马上生效,能够切换到其余tty上进行测试。ui

相关文章
相关标签/搜索