查看某个程序是否支持PAM,使用命令:
#ldd `which cmd` | grep libpam //cmd就代表查看的程序名
如果包含libpam库,那么该程序就支持PAM验证。
-
支持PAM验证呢,就是表示这屋子给安装防盗门预留了空位,
- 不支持PAM呢,就是说房子整个就是封闭的,人根本进不了,或者是房子基本没有墙,不需要对出入进行限制。
- 在PAM机制中,PAM模块就相当于是防盗门上可以安装的各种锁具,这些锁具各有不同的特点和功能,你可以按需要安装。
- 相同的,在PAM中,程序的配置文件就相当于这个防盗门的制作和安装方案,安在什么地方,在支持的各种锁具中选择合适的锁,然后是开这些锁的先后顺序等这些具体使用规范。
拿例子说事,以login这个登录程序为例子,文件名是/etc/pam.d/login,内容是(其中一部分):
- auth optional pam_faildelay.so delay=3000000
- auth required pam_securetty.so
- auth requisite pam_nologin.so
- session [success=ok ignore=ignore module_unknow=ignore default=bad] pam_selinux.so close
- @include common-auth
从上面可以看出来,配置文件是按行指定的,每一行是一个完整的定义。
一般第一列指定的内容是:module-type,一共就只有4种,分别是:
- auth:对用户身份进行识别,如提示输入密码,判断是root否;
- account:对账号各项属性进行检查,如是否允许登录,是否达到最大用户数;
- session:定义登录前,及退出后所要进行的操作,如登录连接信息,用户数据的打开和关闭,挂载fs;
- password:使用用户信息来更新数据,如修改用户密码。
第二列内容是:control-flag,有很多,不过一般常用的是4种,分别是:
- optional:不进行成功与否的返回,一般返回一个pam_ignore;
- required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败;
- requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败;
- sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
第三列内容是PAM模块的存放路径,默认是在/lib/security/目录下,如果在此默认路径下,要填写绝对路径。
第四列内容是PAM模块参数,这个需要根据所使用的模块来添加。
实际操作:现在对linux系统的登录程序login进行针对用户和时间的登录限制。
使用模块pam_time.so
1、检查login程序是否支持PAM
- root@hdp0:~# ldd `which login` | grep libpam
- libpam.so.0 => /lib/libpam.so.0 (0xb76e2000)
- libpam_misc.so.0 => /lib/libpam_misc.so.0 (0xb76de000)
2、在/etc/pam.d/下修改login配置文件
在login配置文件中,在auth的定义之后,加入account的一条验证
account requisite pam_time.so
3、pam_time.so这个模块需要定义另外一个配置文件time.conf
在/etc/security/time.conf中定义限制的具体用户和时间
- vim /etc/security/time.conf
- login;tty3;fenix;Th2100-2300 //作用程序是login,作用在tty3上,fenix允许在周四2100-2300间登录
- login;!tty3;!fenix;!Th2100-2300 //作用程序是login,作用在tty3以外,对用户fenix之外产生影响,允许登录时间是周四2100-2300之外
本文出自 “春种一粒粟” 博客,请务必保留此出处http://spazzzz.blog.51cto.com/2707720/677799