linux中pam模块
⼀、pam简介
Linux-PAM(linux可插⼊认证模块)是⼀套共享库,使本地系统管理员可以随意选择程序的认证⽅式. 换句话说,不⽤(重新编写)重新编译⼀个包含PAM功能的应⽤程序,就可以改变它使⽤的认证机制. 这种⽅式下,就算升级本地认证机制,也不⽤修改程序.
PAM使⽤配置/etc/pam.d/下的⽂件,来管理对程序的认证⽅式.应⽤程序调⽤相应的配置⽂件,从⽽调⽤本地的认证模块.模块放置在/lib/security 下,以加载动态库的形式进,像我们使⽤su命令时,系统会提⽰你输⼊root⽤户的密码.这就是su命令通过调⽤PAM模块实现的.
⼆、PAM的配置⽂件介绍
PAM配置⽂件有两种写法:
⼀种是写在/f⽂件中,但centos6之后的系统中,这个⽂件就没有了。
另⼀种写法是,将PAM配置⽂件放到/etc/pam.d/⽬录下,其规则内容都是不包含 service 部分的,即不包含服务名称,⽽/etc/pam.d ⽬录下⽂件的名字就是服务名称。如: vsftpd,login等.,只是少了最左边的服务名列.如:/etc/pam.d/sshd
由上图可以将配置⽂件分为四列,
第⼀列代表模块类型
第⼆列代表控制标记
第三列代表模块路径
第四列代表模块参数
1.PAM的模块类型
Linux-PAM有四种模块类型,分别代表四种不同的任务
它们是:认证管理(auth),账号管理(account),会话管理(session)和密码(password)管理,⼀个类型可能有多⾏,它们按顺序依次由PAM模块调⽤.
管理⽅式说明
auth⽤来对⽤户的⾝份进⾏识别.如:提⽰⽤户输⼊密码,或判断⽤户是否为root等.
linux认证等级account对帐号的各项属性进⾏检查.如:是否允许登录,是否达到最⼤⽤户数,或是root⽤户是
否允许在这个终端登录等.
session这个模块⽤来定义⽤户登录前的,及⽤户退出后所要进⾏的操作.如:登录连接信息,⽤
户数据的打开与关闭,挂载⽂件系统等.
password使⽤⽤户信息来更新.如:修改⽤户密码.
2.PAM的控制标记
PAM使⽤控制标记来处理和判断各个模块的返回值.(在此只说明简单的认证标记)
控制标记说明
required表⽰即使某个模块对⽤户的验证失败,也要等所有的模块都执⾏完毕后,PAM 才
返回错误信息。这样做是为了不让⽤户知道被哪个模块拒绝。如果对⽤户验证成
功,所有的模块都会返回成功信息。
requisite与required相似,但是如果这个模块返回失败,则⽴刻向应⽤程序返回失败,表⽰此
类型失败.不再进⾏同类型后⾯的操作.
sufficient表⽰如果⼀个⽤户通过这个模块的验证,PAM结构就⽴刻返回验证成功信息
(即使前⾯有模块fail了,也会把 fail结果忽略掉),把控制权交回应⽤程序。后
⾯的层叠模块即使使⽤requisite或者required 控制标志,也不再执⾏。如果验证
失败,sufficient 的作⽤和 optional 相同
optional表⽰即使本⾏指定的模块验证失败,也允许⽤户接受应⽤程序提供的服务,⼀般
返回PAM_IGNORE(忽略).
3.模块路径
模块路径.即要调⽤模块的位置. 如果是64位系统,⼀般保存在/lib64/security,如: pam_unix.so
同⼀个模块,可以出现在不同的类型中.它在不同的类型中所执⾏的操作都不相同.这是由于每个模块针对不同的模块类型,编制了不同的执⾏函数.
4.模块参数
模块参数,即传递给模块的参数.参数可以有多个,之间⽤空格分隔开,如:
password required pam_unix.so nullok obscure min=4 max=8 md5
三、常⽤的PAM模块介绍
PAM模块结合管理
类型
说明
pam_unix.so
auth提⽰⽤户输⼊密码,并与/etc/shadow⽂件相⽐对.匹配返回0
account检查⽤户的账号信息(包括是否过期等).帐号可⽤时,返回0.
password修改⽤户的密码. 将⽤户输⼊的密码,作为⽤户的新密码更新shadow⽂件
pam_shells.so auth
account
如果⽤户想登录系统,那么它的shell必须是在/etc/shells⽂件中之⼀的shell
pam_deny.so account
auth
password
session
该模块可⽤于拒绝访问
pam_permit.so auth
account
password
session
模块任何时候都返回成功.
pam_securetty.so auth如果⽤户要以root登录时,则登录的tty必须在/etc/securetty之中.
pam_listfile.so auth
account
password
session
访问应⽤程的控制开关
pam_cracklib.so password这个模块可以插⼊到⼀个程序的密码栈中,⽤于检查密码的强度.
pam_limits.so session定义使⽤系统资源的上限,root⽤户也会受此限制,可以通过/etc/f
或/etc/security/limits.d/*.conf来设定
四、实例
1、pam_securetty.so
限制root从tty1,tty2,tty5登录(⽆实际意义,只是演⽰pam_securetty的⽤法)
在/etc/pam.d/login中添加如下⼀⾏
1auth required pam_securetty.so
在/etc/pam.d/securetty中将tty1,tty2,tty5注释即可
之后使⽤root⽤户再次登录,就会出现
这么做其实并不是只限制root⽤户,也可以将其它⽤户⽤此⽅法来限定,当系统安装完成后,使⽤此⽅法来增强⼀下安全性。
2、pam_listfile.so
仅essun⽤户可以通过ssh远程登录
在/etc/pam.d/sshd⽂件中添加⼀条
1auth required pam_listfile.so item=user sense=allow file=/etc/sshdusers onerr=succeed
添加两个⽤户essun和tom
编辑file指定的⽂件,添加上⼀个⽤户essun
1#echo "essun" >/etc/sshdusers
使⽤tom⽤户登录
可以看到提⽰输⼊密码,当输⼊正确的密码后会提⽰
就像输⼊了错误的密码⼀样。⽽在使⽤essun⽤户登录则不会出现拒绝登录的提⽰
注:此处如果root也使⽤ssh远程连接,也会受到pam_listfile.so限制的。
其实pam模块的使⽤⽅法套路都差不多
如想了解更多的PAM模块的⽤法请man modules
温馨提⽰:
如果发⽣错误,Linux-PAM 可能会改变系统的安全性。这取决于你⾃⼰的选择,你可以选择不安全(开放
系统)和绝对安全(拒绝任何访问)。通常,Linux-PAM 在发⽣错误时,倾向于后者。任何的配置错误都可能导致系统整个或者部分⽆法访问。
配置 Linux-PAM 时,可能遇到最⼤的问题可能就是 Linux-PAM 的配置⽂件/etc/pam.d/*被删除了。如果发⽣这种事情,你的系统就会被锁住。
有办法可以进⾏恢复,最好的⽅法就是⽤⼀个备份的镜像来恢复系统,或者登录进单⽤
户模式然后进⾏正确的配置。
=====================================完========================================
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论