原文博客链接:http://spazzzz.blog.51cto.com/2707720/677799
在linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等
在linux中进行身份或是状态的验证程序是由PAM来进行的,PAM(Pluggable Authentication Modules)可动态加载验证模块,因为可以按需要动态的对验证的内容进行变更,所以可以大大提高验证的灵活性。
linux各个发行版中,PAM使用的验证模块一般存放在/lib/security/目录下,可以使用ls命令进行查看本计算机支持哪些验证控制方式,一般的PAM模块名字例如pam_unix.so,模块可以随时在这个目录下添加和删除,这不会直接影响程序运行,具体的影响在PAM的配置目录下。
PAM的配置文件一般存放在/etc/pam.conf文件,或者/etc/pam.d/目录下。不过现在一般都会存放在/etc/pam.d/目录下,之下是相对于每个需要被PAM控制的程序的独立配置文件。当一个程序的验证方式配置在pam.conf和pam.d/下某文件中出现时,以pam.d/目录下文件为准。
查看某个程序是否支持PAM,使用命令:
#ldd `which cmd` | grep libpam //cmd就代表查看的程序名
如果包含libpam库,那么该程序就支持PAM验证。
举个不是特别恰当的例子:PAM机制就相当于给一个房屋安装防盗门,也就是对要进入这间屋子的人进行控制,不让这间屋子处于一种任何人都可以随便进入的状态。
支持PAM验证呢,就是表示这屋子给安装防盗门预留了空位,
PAM的各种模块是开发人员预先开发好的,而我们要做的是合理的使用这些模块,让它们保护需要保护的程序。所以要关注的是PAM的配置文件目录/etc/pam.d/
拿例子说事,以login这个登录程序为例子,文件名是/etc/pam.d/login,内容是(其中一部分):
从上面可以看出来,配置文件是按行指定的,每一行是一个完整的定义。
一般第一列指定的内容是:module-type,一共就只有4种,分别是:
第二列内容是:control-flag,有很多,不过一般常用的是4种,分别是:
第三列内容是PAM模块的存放路径,默认是在/lib/security/目录下,如果在此默认路径下,要填写绝对路径。
第四列内容是PAM模块参数,这个需要根据所使用的模块来添加。
实际操作:现在对linux系统的登录程序login进行针对用户和时间的登录限制。
使用模块pam_time.so
1、检查login程序是否支持PAM
2、在/etc/pam.d/下修改login配置文件
在login配置文件中,在auth的定义之后,加入account的一条验证
account requisite pam_time.so
3、pam_time.so这个模块需要定义另外一个配置文件time.conf
在/etc/security/time.conf中定义限制的具体用户和时间
4、对PAM的应用是立刻生效,可以切换到其他tty上进行测试。