[linux]linux密码复杂度修改
(2014-08-15 14:45:41)
标签:
it |
分类: 坚持到底 |
====================================
PAM,即Pluggable Authentication Modules(可插入式身份验证模块)最初是由Sun公司发明的,Sun把它作为一种验证用户身份的灵活方法。多年以来,UNIX环境下的身份验证机制一直就是简单地把用户同他们在/etc/passwd文件里的配置项关联起来而已。后来,因为需要有更强的安全性,而且要支持更大范围的验证机制(像智能卡),所以对灵活性更好的验证方法的需求也就应运而生。某些PAM LDAP模块对全局的验证目录集中执行验证。
所有完善的Linux发行版本都带Linux-PAM,它和Sun公司PAM标准目前的实现没有关系。PAM的概念很简单:需要验证功能的程序只需要知道有一个模块可以用来替它们执行验证功能就行了。PAM的设置保证了模块可以随时添加、删除和重新配置—对于编译工具程序的时候就被链接进来(甚至原本就有)的模块来说,没必要这样做。这种结构的效果就是,PAM已经成为系统管理员极其强大的工具。
PAM模块是通过/etc/pam.d目录下的文件来进行配置的。这个目录下针对每种服务的文件所包含的配置项都有如下形式:
module-type control-flag module-path arguments
module-type字段可以取的值有auth、account、session或者password。auth确定用户是谁,还可能确定他是哪一个组的成员。account实行不基于身份验证的决策,比如根据一天中的时间来访问。session实现了在提供给用户服务的前后需要完成的任务。最后,password用于要求用户提供验证信息(比如口令)的情况。
control-flag字段有4个可能的取值:required、requisite、sufficient和optional。required和optional最常用,它们分别表示:为了程序继续执行模块必须取得成功,或者模块成功与否没有关系。
第3个和第4个字段是动态加载模块对象的路径和参数。如果路径的第1个字符是/,它就被当作是一个绝对路径。否则,这个字段的内容就被追加到默认路径/lib/security的后面。
PAM是上述口令复杂性难题的解决方案之一。pam_cracklib模块能够强制要求口令符合最低强度要求。具体要求则变化多端,所以要使用grep找到正确的配置文件。例如,要保证用户口令不能被John the Ripper破解(参考20.10.3节了解有关它的更多知识),Fedora上的/etc/pam.d/system-auth应该包括:
password required pam_cracklib.so retry=3 minlen=12 difok=4
有了这几行,PAM就会把用户提出的新口令同破解字典和规则集进行对照(这要求有系统库libcrack,还有一个系统字典/usr/lib/cracklib_dict.*)。如果用户的口令不符合cracklib的要求,那么屏幕上就会出现像“The password is too simple(口令太简单)”这样的出错信息。
cracklib的参数规则很复杂,不过下面是对上述特定配置的解释。
—
—
—
现代Linux发行版本包含并且默认使用pam_cracklib模块,但通常不启用口令复杂性规则。
PAM模块有数十种。您可以从www.kernel.org/pub/linux/libs/pam下载专门的模块以及它们的文档。
系统版本:
Red Hat Enterprise Linux AS release 4
Linux用户密码策略
/etc/login.defs密码策略
PASS_MAX_DAYS
PASS_MIN_DAYS
PASS_MIN_LEN
PASS_WARN_AGE
pam_cracklib主要参数说明:
pam_passwdqc主要参数说明:
mix:设置口令字最小长度,默认值是mix=disabled。
max:设置口令字的最大长度,默认值是max=40。
passphrase:设置口令短语中单词的最少个数,默认值是passphrase=3,如果为0则禁用口令短语。
atch:设置密码串的常见程序,默认值是match=4。
similar:设置当我们重设口令时,重新设置的新口令能否与旧口令相似,它可以是similar=permit允许相似或similar=deny不允许相似。
random:设置随机生成口令字的默认长度。默认值是random=42。设为0则禁止该功能。
enforce:设置约束范围,enforce=none表示只警告弱口令字,但不禁止它们使用;enforce=users将对系统上的全体非根用户实行这一限制;enforce=everyone将对包括根用户在内的全体用户实行这一限制。
non-unix:它告诉这个模块不要使用传统的getpwnam函数调用获得用户信息,
retry:设置用户输入口令字时允许重试的次数,默认值是retry=3
密码复杂度通过/etc/pam.d/system-auth实施
如:
要使用pam_cracklib将注释去掉,把pam_passwdqc.so注释掉即可.
#password
password
password
#password
新密码至少有一位与原来的不同.