如何去掉Linux的密码复杂度要求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何去掉Linux的密码复杂度要求相关的知识,希望对你有一定的参考价值。
在linux,设置密码复杂度的方法有几个1. 一个是在/etc/login.defs文件,里面几个选项
PASS_MAX_DAYS 90 #密码最长过期天数
PASS_MIN_DAYS 80 #密码最小过期天数
PASS_MIN_LEN 10 #密码最小长度
PASS_WARN_AGE 7 #密码过期警告天数
2. 另外一个方法是,修改/etc/pam.d/system-auth文件
找到 password requisite pam_cracklib.so这么一行替换成如下:
password requisite pam_cracklib.so retry=5 difok=3 minlen=10 ucredit=-1 lcredit=-3 dcredit=-3 dictpath=/usr/share/cracklib/pw_dict
参数含义:
尝试次数:5
最少不同字符:3
最小密码长度:10
最少大写字母:1
最少小写字母:3
最少数字:3
密码字典:/usr/share/cracklib/pw_dict
这样设置好,你可以做一下测试,不过需要先退出root,因为root用户并不会受这些限制,它可以设置任意的密码。 参考技术A 直接SUDO PASSWD USERNAME
可以已ROOT身份强制修改密码,无视规则 参考技术B 我就搞不懂了,为什么网上搜出来的去掉密码复杂度要求的回答怎么都是教你怎么设置密码复杂度的。TMD全部都是复制的同一个地方的东西,真TM扯淡 参考技术C echo 密码 | passwd --stdin 用户名 参考技术D 一、准备工作
安装 PAM 的 cracklib 模块,cracklib 能提供额外的密码检查能力。
Debian、Ubuntu 或 Linux Mint 系统上:
1 $ sudo apt-get install libpam-cracklib
CentOS、Fedora、RHEL 系统已经默认安装了 cracklib PAM 模块,所以在这些系统上无需执行上面的操作。
注意:此教程中的密码策略只对非 root 用户有效,对 root 用户无效。
二、禁止使用旧密码
找到同时有 “password” 和 “pam_unix.so” 字段并且附加有 “remember=5” 的那行,它表示禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面)。
Debian、Ubuntu 或 Linux Mint 系统上:
1
2 $ sudo vi /etc/pam.d/common-password
password [success=1 default=ignore] pam_unix.so obscure sha512 remember=5
CentOS、Fedora、RHEL 系统上:
1
2 $ sudo vi /etc/pam.d/system-auth
password sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember=5
三、设置最短密码长度
找到同时有 “password” 和 “pam_cracklib.so” 字段并且附加有 “minlen=10” 的那行,它表示最小密码长度为(10 - 类型数量)。这里的 “类型数量” 表示不同的字符类型数量。PAM 提供4种类型符号作为密码(大写字母、小写字母、数字和标点符号)。如果你的密码同时用上了这4种类型的符号,并且 minlen 设为10,那么最短的密码长度允许是6个字符。
Debian、Ubuntu 或 Linux Mint 系统上:
1
2 $ sudo vi /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 difok=3
CentOS、Fedora、RHEL 系统上:
1
2 $ sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10
四、设置密码复杂度
找到同时有 “password” 和 “pam_cracklib.so” 字段并且附加有 “ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1” 的那行,它表示密码必须至少包含一个大写字母(ucredit),两个小写字母(lcredit),一个数字(dcredit)和一个标点符号(ocredit)。
Debian、Ubuntu 或 Linux Mint 系统上:
1
2 $ sudo vi /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1
CentOS、Fedora、RHEL 系统上:
1
2 $ sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1
五、设置密码过期期限
编辑 /etc/login.defs 文件,可以设置当前密码的有效期限,具体变量如下所示:
1
2 $ sudo vi /etc/login.defs
PASSMAXDAYS 150 PASSMINDAYS 0 PASSWARNAGE 7
这些设置要求用户每6个月改变他们的密码,并且会提前7天提醒用户密码快到期了。
如果想为每个用户设置不同的密码期限,使用 chage 命令。下面的命令可以查看某个用户的密码限期:
$ sudo chage -l xmodulo
Last password change : Dec 30, 2013 Password expires :
never Password inactive : never Account expires :
never Minimum number of days between password change :
0 Maximum number of days between password change :
99999 Number of days of warning before password expires : 7
默认情况下,用户的密码永不过期。
下面的命令用于修改 xmodulo 用户的密码期限:
1 $ sudo chage -E 6/30/2014 -m 5 -M 90 -I 30 -W 14 xmodulo
上面的命令将密码期限设为2014年6月3日。另外,修改密码的最短周期为5天,最长周期为90天。密码过期前14天会发送消息提醒用户,过期后帐号会被锁住30天。
将字符串中的所有空格去掉,要求时间复杂度O(N)
/<span style="font-size:18px;">/题目:将字符串中的所有空格去掉,要求时间复杂度O(N)
//空间复杂度O(1)
//感想:最开始我以为这个题目很简单,但面试的时候由于紧张,没有写得特别优化,所以被小米给刷了,贼伤心的
//条件的控制很重要,我当时就是因为紧张,条件没有控制好,现在想想真是很尴尬,
//面试出来后我都有一种想法我他妈就不适合当程序员</span>
#include <iostream>
using namespace std;
#include <string.h>
#include <assert.h>
void SetValue(char *str)
assert(str);
char *tmp=str-1;
int count=0;//测一下一共调用了多少次
while(*str !='\\0')
if(*str == ' ' || str <= tmp)
if(tmp <=str)
tmp=str+1;
else
tmp++;
while(*tmp ==' ' && *tmp !='\\0')
count++;
tmp++;
*str=*tmp;
count++;
if(*str =='\\0')
cout<<"调用的次数:"<<count<<endl;
return;
++str;
cout<<"调用的次数:"<<count<<endl;
int main()
//char str[]="hello worldxxyywhyabd";//情况1
char str[]="hello world xx yy abd";//情况2
cout<<str<<" len:"<<strlen(str)<<endl;
SetValue(str);
cout<<str<<" len:"<<strlen(str)<<endl;
return 0;
以上是关于如何去掉Linux的密码复杂度要求的主要内容,如果未能解决你的问题,请参考以下文章
linux redhat下密码复杂度要求数字大小写字母和特殊符号4类中至少有两类怎么设置