如何在 Gnu/Linux 中设置密码约束

如何在 Gnu/Linux 中设置密码约束
  1. 它至少包含一个小写字母。
  2. 它至少包含一个数字,可以位于除第一个和最后一个位置之外的任何位置。
  3. 它至少包含一个特殊字符(非字母数字:即符号),可以位于除第一个和最后一个位置之外的任何位置。
  4. 它不包含用户 ID 中两个或多个字符的序列。
  5. 它不是用户 ID 的反转,也不包含用户 ID 的反转。
  6. 它不包含先前选择或给定密码中的三个或更多字符的序列。
  7. 它在密码中不会多次包含两个或多个字符的序列(例如,a39tzb39r)。
  8. 它不包含连续的三个或更多重复或连续数字或字符的序列(例如,ax222rm、ct15mnoRx)。

请让我知道单独测试这些的命令。

答案1

用正则表达式来做

1- 它至少包含一个小写字母。

[阿兹]

2-它至少包含一个数字,可以位于除第一个和最后一个位置之外的任何位置。

.[0-9].

3-它至少包含一个特殊字符ID,可以位于除第一个和最后一个位置之外的任何位置。

.[^a-z0-9A-Z]。

4- 它不包含用户 ID 中两个或多个字符的序列。

对于id的每2个字符(但我认为你的意思是用户名(与全名),因为id是数字的)((?!$ U)。)

5- 它不是用户 ID 的反转,也不包含用户 ID 的反转。

U=&(whoami | tac) ((?!$U).)

6- 它不包含先前选择或给定密码中的三个或更多字符的序列。

与#4相同

7- 密码中不得多次包含两个或多个字符的序列(例如,a39tzb39r)。 8- 它不包含连续的三个或更多重复或连续数字或字符的序列(例如,ax222rm、ct15mnoRx)。

(.{2,})\1

然后把它们放在一起;

回声 -n $PASS | grep -P '[az]' | grep -P '[az]' | grep -P '.[0-9].' | grep -P '.[^a-z0-9A-Z].' | grep -vP "((?!$U).)|$ETC"

扩展 $Us 是 for 循环,你应该能够弄清楚......但正如评论提到的,安全密码的唯一正确测试是它超过 14 个字符(并且加盐,并且最好限制 SSH 等密钥) )

相关内容