centos7.6怎么设置允许新密码与用户名相同?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos7.6怎么设置允许新密码与用户名相同?相关的知识,希望对你有一定的参考价值。

centos7.6怎么设置允许新密码与用户名相同

1、设置密码过期的天数。 用户必须在几天内更改密码。 此设置仅在创建用户时才会产生影响,而不会影响到现有用户。 如果设置为现有用户,请运行命令“chage -M(days)(user)”

[root@shaonbean ~]# vi /etc/login.defs
# line 25: set 60 for Password Expiration
PASS_MAX_DAYS 60

2、设置可用密码的最短天数。 至少在改变它之后,用户必须至少使用他们的密码。 此设置仅在创建用户时才会产生影响,而不会影响到现有用户。 如果设置为现有用户,请运行命令“chage -m(days)(user)”

[root@shaonbean ~]# vi /etc/login.defs
# line 26: set 2 for Minimum number of days available
PASS_MIN_DAYS 2

3、在到期前设置警告的天数。 此设置仅在创建用户时才会产生影响,而不会影响到现有用户。 如果设置为存在用户,请运行命令“chage -W(days)(user)”
[root@shaonbean ~]# vi /etc/login.defs
# line 28: set 7 for number of days for warnings
PASS_WARN_AGE 7

4、使用过去使用的密码进行限制。 在这一代中,用户不能设置相同的密码。
[root@shaonbean ~]# vi /etc/pam.d/system-auth
# near line 15: prohibit to use the same password for 5 generation in past
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
5、设置最小密码长度。 用户不能将密码长度设置为小于此参数。
# set 8 for minimum password length
[root@shaonbean ~]# authconfig --passminlen=8 --update
# the parameter is set in a config below
[root@shaonbean ~]# grep "^minlen" /etc/security/pwquality.conf
minlen = 8
6、为新密码设置所需的最少字符类数。 (种类⇒UpperCase / LowerCase / Digits / Others)

# set 2 for minimum number of required classes of characters
[root@shaonbean ~]# authconfig --passminclass=2 --update
# the parameter is set in a config below
[root@shaonbean ~]# grep "^minclass" /etc/security/pwquality.conf
minclass = 2
7、在新密码中设置允许的连续相同字符的最大数量。
# set 2 for maximum number of allowed consecutive same characters
[root@shaonbean ~]# authconfig --passmaxrepeat=2 --update
# the parameter is set in a config below
[root@shaonbean ~]# grep "^maxrepeat" /etc/security/pwquality.conf
maxrepeat = 2
8、在新密码中设置同一类的最大允许连续字符数。
# set 4 for maximum number of allowed consecutive characters of the same class
[root@shaonbean ~]# authconfig --passmaxclassrepeat=4 --update
# the parameter is set in a config below
[root@shaonbean ~]# grep "^maxclassrepeat" /etc/security/pwquality.conf
maxclassrepeat = 4
9、新密码中至少需要一个小写字符
[root@shaonbean ~]# authconfig --enablereqlower --update
# the parameter is set in a config below
# (if you'd like to edit the value, edit it with vi and others)
[root@shaonbean ~]# grep "^lcredit" /etc/security/pwquality.conf
lcredit = -1
10、新密码中至少需要一个大写字符
[root@shaonbean ~]# authconfig --enablerequpper --update
# the parameter is set in a config below
# (if you'd like to edit the value, edit it with vi and others)
[root@shaonbean ~]# grep "^ucredit" /etc/security/pwquality.conf
ucredit = -1
11、新密码中至少需要一位数字
[root@shaonbean ~]# authconfig --enablereqdigit --update
# the parameter is set in a config below
# (if you'd like to edit the value, edit it with vi and others)
[root@shaonbean ~]# grep "^dcredit" /etc/security/pwquality.conf
dcredit = -1
12、新密码中至少需要一个其他字符
[root@shaonbean ~]# authconfig --enablereqother --update
# the parameter is set in a config below
# (if you'd like to edit the value, edit it with vi and others)
[root@shaonbean ~]# grep "^ocredit" /etc/security/pwquality.conf
ocredit = -1
13、在新密码中设置单调字符序列的最大长度。 (ex⇒’12345’,’fedcb’)
[root@shaonbean ~]# vi /etc/security/pwquality.conf
# add to the end
maxsequence = 3
14、设置旧密码中不能出现的新密码中的字符数。

[root@shaonbean ~]# vi /etc/security/pwquality.conf
# add to the end
difok = 5
15、检查新密码中是否包含用户passwd项的GECOS字段中长度超过3个字符的单词
[root@shaonbean ~]# vi /etc/security/pwquality.conf
# add to the end
gecoscheck = 1
16、设置不能包含在密码中的Ssace分隔列表。

[root@shaonbean ~]# vi /etc/security/pwquality.conf
# add to the end
badwords = denywords1 denywords2 denywords3
17、为新密码设置散列/密码算法。 (默认是sha512)
# show current algorithm
[root@shaonbean ~]# authconfig --test | grep hashing
password hashing algorithm is md5
# chnage algorithm to sha512
[root@shaonbean ~]# authconfig --passalgo=sha512 --update
[root@shaonbean ~]# authconfig --test | grep hashing
password hashing algorithm is sha512
参考技术A vi /etc/security/pwquality.conf
修改:
usercheck = 0

注解:
Whether to check if it contains the user name in some form. The check is enabled if the value is not 0.
是否检查是否包含用户名形式。 如果该值为0,则不启用检查。

使用Devise防止密码重用

我知道强制密码在用户创建密码后的一段时间后过期,这不是Devise逻辑的一部分,我打算编写自己的代码来实现。

它也看起来强迫用户不要重复使用最后一个X(在我的情况下为10)密码需要手动编码。

我的想法是,我将创建类似user_passwords表的东西,并在我的代码中使用逻辑来确保新密码与该用户的该表中的任何密码都不匹配。同时我会将新密码插入表中,除非该用户已有10条记录,这意味着我将用新值覆盖最旧的密码。表结构将是这样的:

user_passwords

  • 用户身份
  • encrypted_pa​​ssword
  • created_at

如果有人有更好,更优雅的解决方案来处理这个问题,我会很感激。

答案

我知道强制密码在用户创建密码后的一段时间后过期,这不是Devise逻辑的一部分,我打算编写自己的代码来实现。

在实践中,与安全相关的研究发现这是一个坏主意。那是因为每次变化都会收益递减。也就是说,密码开始强大,然后随着用户尝试遵守策略而变得越来越弱。参见Peter Gutmann的Engineering Security和第7章密码。

从书中,其他愚蠢的事情包括复杂性要求。 (在您反对之前,请阅读本书的相关部分)。


...创建类似user_passwords表的东西,并在我的代码中使用逻辑来确保新密码与该用户的该表中的任何密码都不匹配。

一旦你阅读了这一章,我就可以问:为什么你首先允许用户选择一个弱/受伤/破损的密码?当与Mark Brunett's list of 10 million leaked passwords结合使用时,这些60 KB Bloom过滤器看起来非常有用:)


防止密码重用...

重复使用的是跨站点的密码重用。 Brown,Bracken,Zoccoli和Douglas表示Generating and Remembering Passwords的数字约为70%(Applied Cognitive Psychology,Volume 18,Issue 6,pp.641-651)。而Das,Bonneau,Caesar,Borisov和Wang在The Tangled Web of Password Reuse报告的数字约为45%。请注意,Tangled Web研究必须破解密码,因此这些数字可能更高,因为它们无法恢复所有密码

为了使重用成为更严重的问题,用户必须记住大约25个不同站点的密码,根据The Tangled Web of Password Reuse中的Das,Bonneau,Caesar,Borisov和Wang。

几年前我甚至被这个烧了。我在两个低价值账户上使用了相同的密码。然后GNU's Savannah遭到攻击,攻击者能够使用恢复的密码来破坏一个小小的电子邮件帐户。

现在,当我需要凭据时,我只生成一个长的随机字符串。我甚至不打算为大多数网站写下来。当我需要再次访问某个站点时,我只需要完成恢复过程。

另一答案

devise_security_extension似乎适用于我需要的东西。

但是,目前它不支持Devise 2.0或更高版本。我遇到了很多问题,不得不将我的Devise降级到1.5.3。根据他们留言板上的评论,他们目前正致力于将gem移植到Devise 2.0兼容版本。

我为它的password_expirable和password_archivable模块提供了一个旋转。一切似乎都按预期工作。

它还支持secure_validatable,session_limitable和expirable,前两个我将在不久的将来使用它。

另一答案

在PasswordsController中,您可以检查它。

class PasswordsController < Devise::PasswordsController

  def update
    current_user = User.with_reset_password_token(params[:user][:reset_password_token])
    if current_user && previous_and_new_password_is_same?(current_user)
      current_user.errors[:password] << "has been used previously."
      self.resource = current_user
      respond_with resource
    else
      super
    end
  end

  private

  def previous_and_new_password_is_same?(current_user)
    bcrypt       = ::BCrypt::Password.new(current_user.encrypted_password)
    hashed_value = ::BCrypt::Engine.hash_secret([params[:user][:password], Devise.pepper].join, bcrypt.salt)
    hashed_value == current_user.encrypted_password
  end

end

Here是如何禁止以前使用的密码的Devise gem的文档?

另一答案

devise_security_extension在rails 5中对我不起作用,我创建了我的自定义:

  • 创建一个迁移并添加一个额外的列,如:add_column:users,:old_passwords,:text
  • 在你的模型中添加两​​个回调:after_save:cache_old_pass和before_save:verify_old_pass
  • 创建回调方法: private def verify_old_pass if self.encrypted_password_changed? old_passwords.to_s.split(',').each do |pass_encrypted| if Devise::Encryptor.compare(self.class, pass_encrypted, password) errors.add(:base, 'Your password cannot be previous up to 3 back') return throw(:abort) end end end end def cache_old_pass # cache last 3 passwords if self.encrypted_password_changed? update_column(:old_passwords, ([self.encrypted_password] + old_passwords.to_s.split(',')[0, 3]).join(',')) end end

以上是关于centos7.6怎么设置允许新密码与用户名相同?的主要内容,如果未能解决你的问题,请参考以下文章

允许用户更改密码的模式。用户是不是必须重复新密码以及输入旧密码?

Ubuntu下怎么设置Root超级账户密码

使用Devise防止密码重用

检查用户密码并创建新密码

ssh允许root用户登陆

windows 2008 r2怎么修改用户密码