我想知道密码策略“您的新密码必须与旧密码至少有n 个字符不同”的工作原理。
我的理解是,操作系统实际上从来没有自己存储旧密码,而是它们的哈希码。如果只有哈希码,就无法知道这两个字符串有多少个字符不同。
我是否正确地猜测它只有在passwd
程序同时明确要求您提供旧密码时才能工作?
如果root用户更改了其他人的密码,那么“不同字符数”策略是否根本无法在这里应用?
我想知道密码策略“您的新密码必须与旧密码至少有n 个字符不同”的工作原理。
我的理解是,操作系统实际上从来没有自己存储旧密码,而是它们的哈希码。如果只有哈希码,就无法知道这两个字符串有多少个字符不同。
我是否正确地猜测它只有在passwd
程序同时明确要求您提供旧密码时才能工作?
如果root用户更改了其他人的密码,那么“不同字符数”策略是否根本无法在这里应用?
你是对的。如果密码存储为散列,操作系统绝对无法知道新密码与旧密码有何不同。
策略检查是通过该工具完成的,它可以正常工作,因为该工具还要求您提供旧密码,然后根据一组策略规则检查差异。
此类策略通常通过在询问旧密码时应用它们来实现。
另一种选择是暴力破解旧的。当您输入新密码时,现代计算机可以毫无问题地暴力破解所有与新密码相差 2 个字符的密码。据我所知,这并没有用于典型 Linux 发行版的正常身份验证,但可能一些 PAM 模块实现了这一点。
root 更改密码的常用方法是假设超级用户知道他在做什么。passwd 程序不要求提供旧密码,并允许您覆盖最小长度等规则,风险自负。
管理用户通常可以直接操作密码数据库,因此该用户可以有效地忽略所有密码策略。
例如,root 可以提供
usermod -p
将逐字/etc/shadow
设置的散列密码(带有 ),或者在那里编辑和设置散列密码。这也是为什么管理用户应该遵守更高标准并训练自己在为用户分配密码时使用密码生成器的另一个原因。