linux系统之pam模块
一、pam简介
Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式. 换句话说,不用(重新编写)重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制. 这种方式下,就算升级本地认证机制,也不用修改程序.
PAM使用配置/etc/pam.d/下的文件,来管理对程序的认证方式.应用程序
调用相应的配置文件,从而调用本地的认证模块.模块放置在/lib/security下,以加载动态库的形式进,像我们使用su命令时,系统会提示你输入root用户的密码.这就是su命令通过调用PAM模块实现的.
二、PAM的配置文件介绍
PAM配置文件有两种写法:
一种是写在/etc/pam.conf文件中,但centos6之后的系统中,这个文件就没有了。
另一种写法是,将PAM配置文件放到/etc/pam.d/目录下,其规则内容都是不包含
service 部分的,即不包含服务名称,而/etc/pam.d 目录下文件的名字就是服务名称。如:
vsftpd,login等.,只是少了最左边的服务名列.如:/etc/pam.d/sshd
由上图可以将配置文件分为四列,
第一列代表模块类型
第二列代表控制标记
第三列代表模块路径
第四列代表模块参数
1.PAM的模块类型
Linux-PAM有四种模块类型,分别代表四种不同的任务
它们是:认证管理(auth),账号管理(account),会话管理(session)和密码(password)管理,一个类型可能有多行,它们按顺序依次由PAM模块调用.
PAM使用控制标记来处理和判断各个模块的返回值.(在此只说明简单的认证标记)
模块路径.即要调用模块的位置. 如果是64位系统,一般保存在/lib64/security,如: pam_unix.so
3.模块路径
同一个模块,可以出现在不同的类型中.它在不同的类型中所执行的操作都不相同.这是由于每个模块
针对不同的模块类型,编制了不同的执行函数.
4.模块参数
模块参数,即传递给模块的参数.参数可以有多个,之间用空格分隔开,如:
password required pam_unix.so nullok obscure min=4 max=8 md5
三、常用的PAM模块介绍
四、实例
1、pam_securetty.so
限制root从tty1,tty2,tty5登录(无实际意义,只是演示pam_securetty的用法)
在/etc/pam.d/login中添加如下一行
auth required pam_securetty.so
在/etc/pam.d/securetty中将tty1,tty2,tty5注释即可
之后使用root用户再次登录,就会出现
这么做其实并不是只限制root用户,也可以将其它用户用此方法来限定,当系统安装完成后,使用此方法来增强一下安全性。
2、pam_listfile.so
仅essun用户可以通过ssh远程登录
在/etc/pam.d/sshd文件中添加一条
auth required pam_listfile.so item=user sense=allow
file
=
/etc/sshdusers
onerr=succeed
添加两个用户essun和tom
编辑file指定的文件,添加上一个用户essun
echo "essun" >/etc/sshdusers
使用tom用户登录
可以看到提示输入密码,当输入正确的密码后会提示
就像输入了错误的密码一样。而在使用essun用户登录则不会出现拒绝登录的提示
注:此处如果root也使用ssh远程连接,也会受到pam_listfile.so限制的。
其实pam模块的使用方法套路都差不多
如想了解更多的PAM模块的用法请man modules