zoukankan      html  css  js  c++  java
  • Linux下pam密码复杂度限制

    linux系统是如何实现对用户的密码的复杂度的检查的呢?
    系统对密码的控制是有两部分组成:
    1 cracklib
    2 /etc/login.defs

    pam_cracklib.so 才是控制密码复杂度的关键文件
    /lib/security/pam_cracklib.so
    redhat公司专门开发了cracklib这个安装包来判断密码的复杂度

    # rpm -qa | grep cracklib
    cracklib-2.8.9-3.1 \检查软件是否安装
    cracklib-dicts-2.8.9-3.1 \密码字典文件

    声明:login.defs主要是控制密码的有效期。对密码进行时间管理

    密码的复杂度的判断是通过pam模块控制来实现的,具体的模块是pam_cracklibpam_cracklib 的参数介绍:
    # man pam_cracklib \手册分析该模块的作用

    可用参数说明
    debug
    此选项使模块的信息写入到syslog(3),显示模块的行为(此选项不写密码信息到日志文件)。

    type=XXX
    默认的动作是模块使用以下提示时,要求口令:“新的UNIX密码:“和”重新输入UNIX密码:“。默认的Word UNIX可以被替换为这个选项。

    retry=N
    改变输入密码的次数,默认值是1。就是说,如果用户输入的密码强度不够就退出。可以使用这个选项设置输入的次数,以免一切都从头再来。

    difok=N
    默认值为10。这个参数设置允许的新、旧密码相同字符的个数。不过,如果新密码中1/2的字符和旧密码不同,则新密码被接受。

    difignore=N
    多少个字符的密码应收到difok将被忽略。默认为23

    minlen=N
    新的最低可接受的大小密码(加一个,如果没有禁用学分这是默认值)。除了在新密码的字符数,贷方(在长度+1),给出了各种人物的不同种类(其他,大写,小写,数字)。此参数的默认值是9,它是一个老式的UNIX密码的字符相同类型的所有好,但可能过低,利用一个MD5的系统增加安全性。请注意,有一个在Cracklib本身长度的限制,一“的方式太短“4极限是硬编码和定义的限制(6),将不参考minlen检查对。如果你想允许密码短短5个字符,你不应该使用这个模块。

    dcredit=N
    限制新密码中至少有多少个数字。

    ucredit=N
    限制新密码中至少有多少个大写字符。

    lcredit=N
    限制新密码中至少有多少个小写字符。

    ocredit=N
    限制新密码中至少有多少个其它的字符。

    此参数用于强制模块不提示用户的新密码,但以前使用的堆叠模块提供的密码之一。

    dictpath=/path/to/dict //注:密码字典,这个是验证用户的密码是否是字典一部分的关键

    cracklib密码强度检测过程:
    首先检查密码是否是字典的一部分,如果不是,则进行下面的检查
    密码强度检测过程–>
    新密码是否旧密码的回文–>
    新密码是否只是就密码改变了大小写–>
    新密码是否和旧密码很相似–>
    新密码是否太短–>
    新密码的字符是否是旧密码字符的一个循环 例如旧密码:123 新密码:231 –>
    这个密码以前是否使用过

    /etc/pam.d/system-auth
    auth required pam_env.so
    auth sufficient pam_unix.so nullok try_first_pass
    auth requisite pam_succeed_if.so uid >= 500 quiet
    auth required pam_deny.so

    account required pam_unix.so
    account sufficient pam_succeed_if.so uid < 500 quiet
    account required pam_permit.so

    password requisite pam_cracklib.so try_first_pass retry=3 \复杂度验证
    password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
    password required pam_deny.so

    session optional pam_keyinit.so revoke
    session required pam_limits.so
    session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
    session required pam_unix.so

    实例:
    password required pam_cracklib.so
    difok=3 minlen=15 dcredit=2 ocredit=2
    允许有3个新、旧密码相同字符的
    最小长度15位 和至少包含2数字、至少包含2个特殊字符数

    password required pam_cracklib.so
    dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8
    最小长度为8和至少1位数字,1位大写字母,和另外1个字符的密码

    注意这个设置对于root没有作用,
    只针对普通用户修改自己密码时起作用

     



  • 相关阅读:
    ansible用普通用户执行root权限的命令 + script模块
    screen 实用操作
    Kibana did not load properly
    1500元让我写一个api接口!没问题
    python实现四种出行路线规划(公交、步行、驾车、骑行)
    35行代码下载任意网页的图片
    Comparison of long-read sequencing technologies in the hybrid assembly of complex bacterial genomes
    A single-molecule long-read survey of the human transcriptome
    Long-read sequencing and de novo assembly of a Chinese genome 一个中国人基因组的长读测序和重新组装
    Combination of short-read, long-read, and optical mapping assemblies reveals large-scale tandem repeat arrays with population genetic implications
  • 原文地址:https://www.cnblogs.com/miaoxg/p/5165355.html
Copyright © 2011-2022 走看看