Linux、Windows Server Password Security Policy Strengthen

catalog

1. windows Security and Protection(Logon and Authentication)
2. windows密码强制安全策略
3. PAM(Pluggable Authentication Modules)
4. linux密码强制安全策略配置

 

1. windows Security and Protection(Logon and Authentication)

This page lists resources for logon and authentication in Windows Server 2003, which includes passwords, Kerberos, NTLM, Transport Layer Security/Secure Sockets Layer (TLS/SSL), and Digest. In addition, some protocols are combined into authentication packages, such as Negotiate and Schannel, as part of an extensible authentication architecture.

0x1: Create an extensive defense model

1. Educate your users about how to best protect their accounts from unauthorized attacks 
https://technet.microsoft.com/en-us/library/cc784090#BKMK_UserBP

2. Use the system key utility (Syskey) on computers throughout your network. The system key utility uses strong encryption techniques to secure account password information that is stored in the Security Accounts Manager (SAM) database. 
    1) The system key utility: https://technet.microsoft.com/en-us/library/cc783856
    2) create or update a system key: 

3. Define password policy that ensures that every user is following the password guidelines that you decide are appropriate 
https://technet.microsoft.com/en-us/library/cc784090#BKMK_PasswordPolicy

4. Consider whether implementing account lockout policy is appropriate for your organization. 
https://technet.microsoft.com/en-us/library/cc784090#BKMK_AccountLockout
 

0x2: Stored User Name and Password Best practices

1. Protect your account
2. Use strong passwords for all accounts
3. Change passwords regularly
4. Use different passwords for individual accounts
5. Store user names and passwords only when appropriate

0x3: Designing an Authentication Strategy

0x4: Account Passwords and Policies in Windows Server 

Relevant Link

https://technet.microsoft.com/en-us/library/cc784090
https://technet.microsoft.com/en-us/library/cc758124
https://technet.microsoft.com/en-us/library/cc783860

 

1. windows密码强制安全策略

0x1: 密码策略的设置

密码策略用于”域账户”或”本地用户账户”。它们确定密码设置,例如

1. 强制执行和有效期限
2. 强制密码历史: 密码最长使用期限
3. 密码最短使用期限
4. 密码长度最小值
5. 密码必须符合复杂性要求
6. 是否用可还原的加密(对称可逆)来存储密码
//以上各项的配置方法均需根据当前用户账户类型来选择。在默认情况下,成员计算机的配置与其域控制器的配置相同
 

1.对于本地计算机

对于本地计算机的用户账户,其密码策略设置是在”本地安全设置”管理工具中进行的。下面是具体的配置方法

1. 执行【开始】->【管理工具,打开"安全设置"界面
//对于本地计算机中的"账户和本地策略"都是在此管理工具中进行配置的 
2. 因密码策略属于用户策略范畴,所以选择【安全设置】->【账户策略】->【密码策略】,在右边详细信息窗口中将显示可配置的密码策略选项的当前配置

1. 密码必须符合复杂性要求: 可设置确定密码是否符合复杂性要求,如启用该策略,则密码必须符合以下最低要求:
    1) 不包含全部或部分的用户账户名
    2) 长度至少为6个字符
    3) 包含来自以下4个类别中的3个字符
        3.1) 英文大写字母(A~Z)
        3.2) 英文小写字母(a~z)
        3.3) 10个基本数字(0~9)
        3.4) 非字母字符(例如!、$、#、%)

2. 密码长度最小值
该安全设置确定用户账户的密码可以包含的最少字符个数,可以设置为1~14个字符之间的某个值,或者通过将字符数设置为0,可设置不需要密码 
    1) 在域控制器上的默认值为7
    2) 而在独立服务器上为0(允许不需要密码)

3. 密码最长使用期限
该安全设置确定系统要求用户更改密码之前可以使用该密码的时间(单位为天)。可将密码的过期天数设置在1~999天之间,或将天数设置为0,可指定密码永不过期
    1) 如果密码最长使用期限在1~999天之间,那么"密码最短使用期限"必须小于密码最长使用期限
    2) 如果密码最长使用期限设置为0,则密码最短使用期限可以是1~998天之间的任何值,默认值:42 
//使密码每隔30~90天过期一次是一种安全的最佳操作,取决于环境。通过这种方式,攻击者只能够在有限的时间内破解用户密码,并访问网络资源 

4. 密码最短使用期限
该安全策略设置确定在用户可以更改密码之前必须使用该密码的时间(单位为天)。可以设置1~998天之间的某个值,或者将天数设置为0,允许立即更改密码 
    1) 密码最短使用期限必须小于"密码最长使用期限",除非密码最长使用期限设置为0(表明密码永不过期)
    2) 如果密码最长使用期限设置为0,那么密码最短使用期限可设置为0~998天之间的任意值 
//如果希望上面设置的“强制密码历史”安全策略选项设置有效,则将密码最短有效期限配置为大于0。如果没有密码最短有效期限,则用户可以循环以前的密码,直到获得喜欢的旧密码 

5. 强制密码历史
重新使用旧密码之前,该安全设置确定某个用户账户所使用的新密码不能与该账户所使用的最近的旧密码一样。该值必须为0~24之间的一个数值。该策略通过确保旧密码不能在某段时间内重复使用,使用户账户更安全
    1) 在域控制器上的默认值为24
    2) 而在独立服务器上为0。 
//要维持密码历史记录的有效性,应在通过启用密码最短使用期限安全策略设置更改密码之后,不允许立即更改密码 

6. 用可还原的加密来存储密码
该安全设置确定操作系统是否使用可还原的加密来存储密码。
如果应用程序使用了要求知道用户密码才能进行身份验证的协议,则该策略可对它提供支持。使用可还原的加密存储密码和存储明文版本密码本质上是相同的。因此,除非应用程序有比保护密码信息更重要的要求,否则不必启用该策略,系统默认值为禁用
//当使用质询握手身份验证协议(CHAP)通过远程访问或Internet身份验证服务(IAS)进行身份验证时,该策略是必需的。在Internet信息服务(IIS)中使用摘要式验证时也要求该策略
 

如果启用了此安全策略,而所配置的用户密码不符合此配置要求时系统会提示错误

1. 在默认情况下,安全选项在域控制器上是已启用的
2. 而在大部分server独立服务器上是已禁用的

2.在基于 Active Directory 的域中配置密码策略设置

1. 单击"开始"、"控制面板",在"控制面板"窗口中,双击"管理工具",然后双击"Active Directory 用户与计算机"
2. 右键单击域的根容器:
3. 从出现的菜单上选择"属性"
4. 在域的属性对话框中,单击"组策略"选项卡,然后单击"新建",以在根容器中创建一个新的组策略对象。为新策略名键入"Domain Policy",然后单击"关闭" 
//注意:Microsoft 建议您创建一个新的组策略对象而不是编辑名为"默认域策略"的内置组策略,因为这样做可以在安全设置有严重问题时更容易恢复系统。如果新安全设置产生了问题,您可以在隔离引起问题的设置之前,先临时禁用新的组策略对象 
5. 右键单击域的根容器,然后单击"属性" 
6. 在属性对话框中,单击"组策略"选项卡,然后选择"域策略" 
7. 单击"向上",将新的 GPO 移动到列表的顶端,然后单击"编辑",为您刚才创建的 GPO 打开"组策略对象编辑器" 
8. 在"计算机配置"下,导航到 Windows 设置\安全设置\帐户策略\密码策略文件夹
9. 在详细信息窗格中,双击"强制密码历史",选中"定义这个策略设置"复选框,将"保存密码历史记录"的值设置为 24,然后单击"确定" 
强制密码历史属性
10. 在详细信息窗格中,双击"密码最长使用期限",选中"定义这个策略设置"复选框,将"密码过期时间"的值设置为 42,单击"确定",然后单击"确定",关闭出现的"建议的数值改动"窗口。
密码最长使用期限属性
11. 在详细信息窗格中,双击"密码最短使用期限",选中"定义这个策略设置"复选框,将"在以下天数后可以更改密码"的值设置为 2,然后单击"确定" 
密码最短使用期限属性
12. 在详细信息窗格中,双击"最小密码长度",选中"定义这个策略设置"复选框,将"密码必须至少是"的值设置为 8, 然后双击"确定"
最小密码长度属性
13. 在详细信息窗格中,双击"密码必须符合复杂性要求",选中"在模板中定义这个策略设置"复选框,选择"已启用",然后单击"确定" 
密码必须符合复杂性要求属性
14. 关闭"组策略对象编辑器",然后单击"确定",以关闭域的属性对话框,然后退出"Active Directory 用户和计算机"
 

0x2: 使用HMC API接口配置增强的密码策略

可以使用硬件管理控制台 (HMC) 对本地认证的用户强制实施密码需求。增强的密码策略功能允许系统管理员设置密码限制。增强的密码策略适用于已安装 HMC 的系统
借助增强的密码策略,系统管理员可为所有用户定义单个密码策略。HMC 提供中等安全密码策略,该策略由系统管理员激活来设置密码限制。系统管理员可以激活该中等安全策略或用户定义的新策略。不可从系统中除去 HMC 中等安全密码策略。下表列出了中等安全策略的属性和缺省值

1. min_pwage: 密码必须保持活动的最少天数: 缺省值1
2. pwage: 密码可以保持活动的最多天数: 缺省值180
3. min_length: 密码的最小长度: 缺省值8
4. hist_size: 不能复用的已保存先前密码数: 缺省值10
5. warn_pwage: 向用户警告密码即将到期的天数: 缺省值7
6. min_digits: 密码中必需使用的数字个数: 缺省值无
7. min_uppercase: 必须大写的字符数: 缺省值1
8. min_lowercase: 必须小写的字符数: 缺省值6
9. min_special_chars: 密码中必须含有的特殊字符数: 缺省值无
 

需要注意的是

1. HMC 中等安全密码策略不适用于 hscroot、hscpe 和 root 用户标识
2. HMC 中等安全密码策略只影响在 HMC 上管理的本地认证的用户,不能对 LDAP 或 Kerberos 用户强制实施
3. HMC 中等安全密码策略或用户定义的策略允许系统管理员设置密码复用限制
4. HMC 中等安全密码是只读的,并且 HMC 中等安全密码的属性无法更改。可以创建用户定义的新密码来设置密码限制

HMC 中等安全密码策略可使用命令行界面 (CLI) 来配置。您可以使用下列命令来配置 HMC 中等安全密码策略

1. mkpwdpolicy: mkpwdpolicy 命令可通过从包含所有参数的文件导入策略或从 CLI 创建策略来添加新的密码策略 
2. lspwdpolicy: lspwdpolicy 命令可列出所有可用的密码策略概要文件并搜索特定参数。您还可以查看当前活动的策略 
3. rmpwdpolicy: rmpwdpolicy 命令可除去现有的不活动密码策略 
//注: 不能除去活动的中等安全策略和缺省只读策略 
4. chpwdpolicy: rmpwdpolicy 命令可更改不活动密码策略中的参数
 

0x3: 强制密码安全策略

本地安全策略 -> 安全设置 -> 账户设置 -> 密码策略
1. 密码必须符合复杂性要求:启用
2. 密码长度最小值:8个字符
3. 密码最长存留期:90天
4. 密码最短存留期:1天
5. 强制密码历史:1个记住密码

本地策略 -> 安全选项
1. 登录屏幕上不要显示上次登录的用户名:启用
 

0x4: 编程实现自动化安全策略配置

在命令行下使用secedit.exe进行安全策略配置

1. secedit /analyze: 分析组策略 
2. secedit /configure: 配置组策略
3. secedit /export: 导出组策略
4. secedit /validate: 验证模板语法
5. secedit /refreshpolicy: 更新组策略
//与访问注册表只需reg文件不同的是,访问组策略除了要有个模板文件(还是inf),还需要一个安全数据库文件(sdb)。要修改组策略,必须先将模板导入安全数据库,再通过应用安全数据库来刷新组策略
 

gp.inf

[version]
signature="$CHICAGO$"
[System Access]
MinimumPasswordAge = 1
MaximumPasswordAge = 90
MinimumPasswordLength = 8
PasswordComplexity = 1
PasswordHistorySize = 1  
[Registry Values]
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DontDisplayLastUserName=4,1

/*
本地安全策略 -> 安全设置 -> 账户设置 -> 密码策略
1. 密码必须符合复杂性要求:启用
2. 密码长度最小值:8个字符
3. 密码最长存留期:90天
4. 密码最短存留期:1天
5. 强制密码历史:1个记住密码

本地策略 -> 安全选项
1. 登录屏幕上不要显示上次登录的用户名:启用
*/
 

secedit /configure /db gp.sdb /cfg gp.inf /quiet
这个命令执行完成后,将在当前目录产生一个gp.sdb,它是”中间产品”,我们可以删除它,/quiet参数表示”安静模式”,不产生日志
关于命令行下读取组策略的问题,系统默认的安全数据库位于%windir%/security/database/secedit.sdb,将它导出至inf文件

secedit /export /cfg gp.inf /log 1.log
//gp.inf中保存的就是当前系统的安全策略配置

windows server 2003、2008、都测试通过,使用egedit.msc命令可以查看设置结果

0x5: 回滚方案

1. 在修复前导出当前组策略,并保存备份: secedit /export /cfg gp_bak.inf /log 1.log
2. 需要回滚的时候,使用备份的组策略文件进行配置修改: secedit /configure /db gp_bak.sdb /cfg gp_bak.inf /quiet
3. 完成回滚

Relevant Link

http://bbs.csdn.net/topics/70409280
http://bbs.pediy.com/showthread.php?t=123435
#PSTip View Policy Settings with RSOP WMI classes
http://www.activexperts.com/network-monitor/windowsmanagement/adminscripts/computermanagement/policy/ http://blog.csdn.net/dlyhlq/article/details/2851573 http://www.microsoft.com/china/smb/issues/sgc/articles/enforce_strong_passwords.mspx http://book.51cto.com/art/200704/44945.htm http://book.51cto.com/art/200704/44852.htm http://www-01.ibm.com/support/knowledgecenter/9109-RMD/p7ha1/enhancedpasswordpolicy.htm?lang=zh

3. PAM(Pluggable Authentication Modules)

PAM(Pluggable Authentication Modules)是由Sun提出的一种认证机制。它通过提供一些”动态链接库”和”一套统一的API”,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系 统中添加新的认证手段。PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等,PAM的配置方式

1. 通过单个配置文件/etc/pam.conf
2. RedHat还支持另外一种配置方式,即通过配置目录/etc/pam.d/,且这种的优先级要高于单个配置文件的方式

0x1: 使用配置文件/etc/pam.conf

该文件是由如下的行所组成的

service-name module-type control-flag module-path arguments

1. service-name: 服务的名字
例如telnet、login、ftp等,服务名字"OTHER"代表所有没有在该文件中明确配置的其它服务

2. module-type: 模块类型有四种,即对应PAM所支持的四种管理方式。同一个服务可以调用多个PAM模块进行认证,这些模块构成一个stack
    1) auth
    2) account
    3) session
    4) password

3. control-flag: 用来告诉PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,它有四种可能的值
    1) required: required表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会立即通知用户,而是要等到同一stack 中的所有模块全部执行完毕再将失败结果返回给应用程序,可以认为是一个必要条件
    2) requisite: requisite与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一stack内的任何模块,而是直 接将控制权返回给应用程序。是一个必要条件。注:这种只有RedHat支持,Solaris不支持
    3) sufficient: sufficient 表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack内的其它模块,但是如果本模块返回失败的话可以忽略。可以认为是一个充分条件
    4) optional: optional表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略

4. module-path: 用来指明本模块对应的程序文件的路径名,一般采用绝对路径,如果没有给出绝对路径,默认该文件在目录/usr/lib/security下面

5. arguments: 用来传递给该模块的参数。一般来说每个模块的参数都不相同,可以由该模块的开发者自己定义,但是也有以下几个共同的参数
    1) debug: 该模块应当用syslog()将调试信息写入到系统日志文件中
    2) no_warn: 表明该模块不应把警告信息发送给应用程序
    3) use_first_pass: 表明该模块不能提示用户输入密码,而应使用前一个模块从用户那里得到的密码
    4) try_first_pass: 表明该模块首先应当使用前一个模块从用户那里得到的密码,如果该密码验证不通过,再提示用户输入新的密码
    5) use_mapped_pass: 该模块不能提示用户输入密码,而是使用映射过的密码
    6) expose_account: 允许该模块显示用户的帐号名等信息,一般只能在安全的环境下使用,因为泄漏用户名会对安全造成一定程度的威胁
 

0x2: 使用配置目录/etc/pam.d/(只适用于RedHat Linux)

该目录下的每个文件的名字对应服务名,例如ftp服务对应文件/etc/pam.d/ftp。如果名为xxxx的服务所对应的配置文件/etc/pam.d/xxxx不存 在,则该服务将使用默认的配置文件/etc/pam.d/other。每个文件由如下格式的文本行所构成

module-type control-flag module-path arguments
//每个字段的含义和/etc/pam.conf中的相同

Relevant Link

http://www.kafan.cn/edu/46999104.html

 

4. linux密码强制安全策略配置

限定Linux上的账户(包括root)的密码强度本身是一个伪命题,root用户可以直接操作/etc/shadow修改密码,对Linux来说,强制部署密码策略目的是提高安全型的门槛
Linux用户密码的有效期,是否可以修改密码可以通过login.defs文件控制,对login.defs文件修只影响后续建立的用户,如果要改变以前建立的用户的有效期等可以使用chage命令
Linux用户密码的复杂度可以通过pam pam_cracklib module或pam_passwdqc module控制,两者不能同时使用

0x1: passwdqc

passwdqc 是一个密码强度检查和策略增加工具集。包含一个可选的 PAM 模块 (pam_passwdqc) 和命令行工具 (pwqcheck and pwqgen) 以及开发库 (libpasswdqc).
On systems with PAM, pam_passwdqc is normally invoked on password changes by programs such as passwd(1). It is capable of checking password or passphrase strength, enforcing a policy, and offering randomly-generated passphrases, with all of these features being optional and easily (re-)configurable. pwqcheck and pwqgen are standalone password/passphrase strength checking and random passphrase generator programs, respectively, and are usable from scripts. libpasswdqc is the underlying library, which may also be used from third-party programs.

vim /etc/pam.d/system-auth 
//or
vim /etc/pam.conf 
//添加一行
password required pam_passwdqc.so min=disabled,disabled,12,8,8 max=30 passphrase=3 match=4 similar=deny enforce=everyone
 

参数解释如下

password required pam_passwdqc.so min=disabled,disabled,12,8,8 max=30 passphrase=3 match=4 similar=deny enforce=everyone

1. password: 调用password PAM模块
2. required: required表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会立即通知用户,而是要等到同一stack 中的所有模块全部执行完毕再将失败结果返回给应用程序,可以认为是一个必要条件

3. pam_passwdqc.so: 要引入的模块
4. min=disabled,disabled,12,8,8: 设置口令字最小长度,每个设置项分别使用逗号分隔
    1) 只包含一种字符的密码,拒绝(大小写、数字、特殊字符分别为4种字符) 
    2) 只包含两种字符的密码,拒绝
    3) 如果密码中被识别出了常用的单词,那么最小长度必须为12位,常用单词的最小识别长度为3(由passphrase=3制定)  
    4) 包含三种字符的密码,最小长度为8位
    5) 包含四种字符的密码,最小长度为8位 

5. max: 设置口令字的最大长度,默认值是max=40 
6. passphrase:设置口令短语中单词的最少个数,默认值是passphrase=3,如果为0则禁用口令短语 

7. match: 设置密码串的常见程序,默认值是match=4,如果发现本次修改的密码和老密码有4个substring的长度类似,就认为是弱密码
8. similar: 设置当我们重设口令时,重新设置的新口令能否与旧口令相似
    1) similar=permit: 允许相似
    2) similar=deny: 不允许相似 

enforce=everyone: 设置约束范围
    1) enforce=none: 表示只警告弱口令字,但不禁止它们使用
    2) enforce=users: 对系统上的全体非根用户实行这一限制
    3) enforce=everyone: 对包括根用户在内的全体用户实行这一限制
 

0x2: /etc/login.defs密码策略

cat /etc/login.defs

1. PASS_MAX_DAYS   99999     #密码的最大有效期, 99999:永久有期
2. PASS_MIN_DAYS   0         #是否可修改密码,0可修改,非0多少天后可修改
3. PASS_MIN_LEN    5         #密码最小长度,如果使用pam_cracklib module,该参数不再有效
4. PASS_WARN_AGE   7         #密码失效前多少天在用户登录时通知用户修改密码

0x3: 自动化部署强制密码策略

1. CentOS、Fedora、RHEL
    1) 安装pam_passwdqc.so: yum install pam_passwdqc.so 
    2) 修改安全策略配置文件
        2.1) vi /etc/pam.d/system-auth
        2.2) 注释掉: password  requisite  pam_cracklib.so  try_first_pass  retry=3
        2.3) 在其后面添加: password required pam_passwdqc.so min=disabled,disabled,12,8,8 max=30 passphrase=3 match=4 similar=deny enforce=everyone 
        
2. Debian、Ubuntu或Linux Mint
    1) 安装pam_passwdqc.so: apt-get install passwdqc 
    2) 修改安全策略配置文件
        2.1) sudo vi /etc/pam.d/common-password
        2.2) 在文件中添加: password required pam_passwdqc.so min=disabled,disabled,12,8,8 max=30 passphrase=3 match=4 similar=deny enforce=everyone
 

尝试添加一个弱密码帐号

useradd test
passwd test
//123

0x4: 自动化修复流程

1. 使用shell脚本执行yum/apt-get指令,安装passwdqc库
2. 通过检查/lib/security/pam_passwdqc.so是否存在判断passwdqc库是否安装成功
3. 如果安装成功,则根据不同操作系统选择不同的配置文件修改方案
    1) CentOS、Fedora、RHEL: /etc/pam.d/system-auth
        1.1) 备份原始文件
        1.2) 检查是否存在: "password  requisite  pam_cracklib.so  try_first_pass  retry=3"这行,如果存在,则删除之
        1.3) 删除之前旧的配置(防止重复修复):  
        1.4) 添加新的强制密码策略: password required pam_passwdqc.so min=disabled,disabled,12,8,8 max=30 passphrase=3 match=4 similar=deny enforce=everyone 
    2) Debian、Ubuntu或Linux Mint: /etc/pam.d/common-password
        2.1) 备份原始文件 
        2.2) 删除之前旧的配置(防止重复修复):  
        2.3) 添加新的强制密码策略: password required pam_passwdqc.so min=disabled,disabled,12,8,8 max=30 passphrase=3 match=4 similar=deny enforce=everyone
5. 完成加固

0x5: 回滚方案

1. 判断操作系统,根据不同操作系统将备份文件回滚到指定的目录
    1) CentOS、Fedora、RHEL: /etc/pam.d/system-auth
        1.1) mv ./system-auth_bak /etc/pam.d/system-auth
    2) Debian、Ubuntu或Linux Mint: /etc/pam.d/common-password
        2.1) mv ./common-password_bak /etc/pam.d/common-password
2. 完成回滚

0x6: Code

#!/bin/bash

function check_os_type()
{
        local line

        line=`head -n 1 /etc/issue`
        if echo $line|grep "[Cc]ent[Oo][Ss]" >/dev/null; then
            br_os_type=1
        elif echo $line|grep "[Rr]ed.Hat.Enterprise" >/dev/null; then
            br_os_type=2
        elif echo $line|grep "[Uu]buntu" >/dev/null; then
            br_os_type=3
        elif echo $line|grep "[Dd]ebian" >/dev/null; then
            br_os_type=4
        elif echo $line|grep "[Ff]edora" >/dev/null; then
            br_os_type=5
        else
            echo -e "target os type - $line is not supported."
            exit 0
        fi

        echo -e "target os type - $line"
        #echo $br_os_type
}

function so_install()
{
    echo $br_os_type
    case $br_os_type in
            1|2|5)
        # centos or red hat or fedora
        yum install -y pam_passwdqc.so ;;
            3|4)    
        # ubuntu or debain
        apt-get -y install passwdqc* ;;
    esac
} 


function check_so_install()
{
    soFile="/lib/security/pam_passwdqc.so"
    if [ -f "$soFile" ]
    then
        echo "$soFile install ok!" 
    fi    
}


function edit_profile
{
    case $br_os_type in
                1|2|5)
                # centos or red hat or fedora
                cp /etc/pam.d/system-auth ./system-auth_bak
        sed '/pam_cracklib.so/d' /etc/pam.d/system-auth > ./system-auth.tmp
                mv ./system-auth.tmp /etc/pam.d/system-auth
                sed '/pam_passwdqc.so/d' /etc/pam.d/system-auth > ./system-auth.tmp
                mv ./system-auth.tmp /etc/pam.d/system-auth
        echo "password required pam_passwdqc.so min=disabled,disabled,12,8,8 max=30 passphrase=3 match=4 similar=deny enforce=everyone" >> /etc/pam.d/system-auth 
        echo "passwd strength fix ok"
        cat /etc/pam.d/system-auth
        ;;
                3|4)
                # ubuntu or debain
                cp /etc/pam.d/common-password ./common-password_bak
        sed '/pam_passwdqc.so/d' /etc/pam.d/common-password > ./common-password.tmp
                mv ./common-password.tmp /etc/pam.d/common-password
                echo "password required pam_passwdqc.so min=disabled,disabled,12,8,8 max=30 passphrase=3 match=4 similar=deny enforce=everyone" >> /etc/pam.d/common-password
        echo "passwd strength fix ok"
                cat /etc/pam.d/common-password
        ;;
        esac
}


function restore()
{
    case $br_os_type in
                1|2|5)
                # centos or red hat or fedora
                mv ./system-auth_bak /etc/pam.d/system-auth
        echo "passwd strength restore ok"
                cat /etc/pam.d/system-auth
                ;;
                3|4)
                # ubuntu or debain
                mv ./common-password_bak /etc/pam.d/common-password
        echo "passwd strength restore ok"
                cat /etc/pam.d/common-password
                ;;
        esac
}


if [ ! $# == 1 ]; then
    echo "Usage: $0 fix/restore"
    exit
fi

if [ $1 = 'fix' ] ; then
    check_os_type
        so_install
        check_so_install
        edit_profile
fi

if [ $1 = 'restore' ] ; then
    check_os_type
    restore        
fi

Relevant Link

http://victor-yu.info/2015/02/03/passwd_error_module_is_unknown/
http://blog.csdn.net/chenfei/article/details/14583
http://www.cnblogs.com/ylan2009/articles/2321177.html
http://www.oschina.net/p/passwdqc
http://blog.itpub.net/9390331/viewspace-710719/
http://blog.sina.com.cn/s/blog_7201f0430102v0tr.html
http://fanli7.net/a/bianchengyuyan/C__/20131121/444743.html
 

 

发表评论