【PAM】HowtoConfigureandUsePAMinLinux?
⼀、什么是PAM
PAM(Pluggable Authentication Modules )是由Sun提出的⼀种认证机制。
它通过提供⼀些动态链接库和⼀套统⼀的API,将系统提供的服务 和该服务的认证⽅式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证⽅式⽽⽆需更改服务程序,同时也便于向系 统中添加新的认证⼿段。
PAM最初是集成在Solaris中,⽬前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等。
⼆、PAM配置⽂件
PAM的配置是通过单个配置⽂件/f。
RedHat还⽀持另外⼀种配置⽅式,即通过配置⽬录/etc/pam.d/,且这种的优先级要⾼于单 个配置⽂件的⽅式。
/etc/pam.d/⽬录下的每个⽂件的名字对应服务名,例如ftp服务对应⽂件/etc/pam.d/ftp。
如果名为service-name的服务所对应的配置⽂件/etc/pam.d/service-name不存 在,则该服务将使⽤默认的配置⽂件/etc/pam.d/other。
service-name 服务的名字,⽐如telnet、login、ftp等,服务名字“other”代表所有没有在该⽂件中明确配置的其它服务。
# ll /etc/pam.d/怎么将linux系统改成中文
PAM该⽂件是由如下列所组成的:
m o dule-type    c o ntr o l-fla g    m o dule-pa th    a r gum ents
mo ntro rguments
#  cat  /etc/pam.d/sshd
auth、account、session、password,即对应PAM所⽀持的四种管理⽅式。
module-type 模块类型有四种:auth、account、session、password
同⼀个服务可以调⽤多个PAM模块进⾏认证,这些模块构成⼀个stack。
control-flag ⽤来告诉PAM库该如何处理与该服务相关的PAM模块的成功或失败情况。
required,requisite,sufficient,optional。
它有四种可能的值:required,requisite,sufficient,optional
required 表⽰本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会⽴即通知⽤户,⽽是要等到同⼀stack 中的所有模块全部执⾏完毕再将失败结果返回给应⽤程序,可以认为是⼀个必要条件。
requisite 与required类似,该模块必须返回成功才能通过认证,但是⼀旦该模块返回失败,将不再执⾏同⼀stack内的任何模块,⽽是直 接将控制权返回给应⽤程序,是⼀个必要条件。
sufficient 表明本模块返回成功已经⾜以通过⾝份认证的要求,不必再执⾏同⼀stack内的其它模块,但是如果本模块返回失败的话可以 忽略。可以认为是⼀个充分条件。
optional表明本模块是可选的,它的成功与否⼀般不会对⾝份认证起关键作⽤,其返回值⼀般被忽略。
optional
对于control-flag,从Linux-PAM-0.63版本起,⽀持⼀种新的语法,具体可参看LinuxPAM⽂档。
module-path ⽤来指明本模块对应的程序⽂件的路径名,⼀般采⽤绝对路径,如果没有给出绝对路径,默认该⽂件在⽬录/usr/lib64/security 下⾯。
# ll /usr/lib64/security
arguments 是⽤来传递给该模块的参数。
⼀般来说每个模块的参数都不相同,可以由该模块的开发者⾃⼰定义,但是也有以下⼏个共同 的参数:
debug    该模块应当⽤syslog( )将调试信息写⼊到系统⽇志⽂件中。
no_warn    该模块不应把警告信息发送给应⽤程序。
use_first_pass  该模块不能提⽰⽤户输⼊密码,⽽应使⽤前⼀个模块从⽤户那⾥得到的密码。
try_first_pass  该模块⾸先应当使⽤前⼀个模块从⽤户那⾥得到的密码,如果该密码验证不通过,再提⽰⽤户输⼊新的密码。
use_mapped_pass  该模块不能提⽰⽤户输⼊密码,⽽是使⽤映射过的密码。
expose_account  该模块 允许显⽰⽤户的帐号名等信息,⼀般只能在安全的环境下使⽤,因为泄漏⽤户名会对安全造成⼀定程度的威胁。
三、设置操作系统⽤户的密码复杂度
CentOS7.x  密码复杂度通过/etc/pam.d/system-auth这个⽂件来实现,我们先看⼀下默认有什么内容:
# cat /etc/pam.d/system-auth
pam_pwquality.so这个模块。
在这个⽂件中我们会⽤到pam_pwquality.so
pam_pwquality.so是⼀个常⽤并且⾮常重要的PAM模块,该模块主要的作⽤是对⽤户密码的强健性进⾏检测,即检查和限制⽤户⾃定义密码的长度、复杂度和历史等,如不满⾜上述强度的密码将拒绝使
⽤!
pa m_pw qua lity.so⽐较重要和难于理解的是它的⼀些参数和计数⽅法,其常⽤参数包括: 
debug      将调试信息写⼊⽇志
type=xxx    当添加/修改密码时,系统给出的缺省提⽰符是“New UNIX password:”以及“Retype UNIX password:”,⽽使⽤该参数可以⾃定义输⼊密码的提⽰符,⽐如指定type=your own word
retry=N        定义登录/修改密码失败时,可以重试的次数
Difok=N      定义新密码中必须有⼏个字符要与旧密码不同,但是如果新密码中有1/2以上的字符与旧密码不同时,该新密码将被接受
minlen=N    定义⽤户密码的最⼩长度
dcredit=N    定义⽤户密码中必须包含多少个数字
ucredit=N    定义⽤户密码中必须包含多少个⼤写字母
lcredit=N      定义⽤户密码中必须包含多少个⼩些字母
ocredit=N    定义⽤户密码中必须包含多少个特殊字符(除数字、字母之外)
根据需要将密码策略制定如下:必须包含⾄少⼀个⼩写字母、数字、特殊字符,密码长度⾄少8位
# cp /etc/pam.d/system-auth  /root/system-auth.bak
#  vim  /etc/pam.d/system-auth
>>>>>>>>>>>>###
assword requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= Difok=3 minlen=8 ucredit=-1
lcredit=-1 dcredit=-1 ocredit=-1
>>>>>>>>>>>>####
注:  *credit=-1 表⽰⾄少有⼀个
配置完密码复杂度,我们还需要在/etc/login.defs配置密码有效期。
PASS_MIN_LEN这个参数在我们配置了上⼀个⽂件,在这⾥的配置就不起作⽤了。
其中的PASS_MIN_LEN
#  cat  /etc/login.defs
PASS_MAX_DAYS  99999  密码的最⼤有效期, 99999:永久有期
PASS_MAX_DAYS  99999
PASS_MIN_DAYS  0          是否可修改密码,0可修改,⾮0多少天后可修改
PASS_MIN_LEN    5            密码最⼩长度,使⽤pam_cracklib module,该参数不再有效PASS_WARN_AGE  7        密码失效前多少天在⽤户登录时通知⽤户修改密码

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论