如何用 PAM 模块加强 Linux 密码复杂度?一文搞定!

在不同的Linux发行版中,配置密码复杂度的方式有所不同。通常,密码复杂度的管理是通过PAM来实现的
首页 新闻资讯 行业资讯 如何用 PAM 模块加强 Linux 密码复杂度?一文搞定!

在现代企业的生产环境中,信息安全是重中之重。密码作为身份验证的重要手段,其安全性直接关系到系统的整体防护能力。一个简单的密码可能是黑客攻破系统的敲门砖,带来无法估量的风险。因此,许多公司在操作系统中配置了强密码策略,以确保每一个用户密码都能抵挡住外部的攻击。

那么,如何有效地管理这些密码复杂度要求呢?

52861ca600db7cd6364069f78a502db0adeb40.png

在不同的Linux发行版中,配置密码复杂度的方式有所不同。通常,密码复杂度的管理是通过PAM来实现的。

Red Hat/CentOS/Fedora系列

在Red Hat Enterprise Linux``CentOS和Fedora等发行版中,密码复杂度的配置主要通过PAM(Pluggable Authentication Modules,可插拔认证模块)中的pam_pwquality.so模块来实现。具体操作方法如下:

简单来说,你需要对系统认证文件进行编辑:

打开终端,输入以下命令进入配置文件编辑界面:

vim/etc/pam.d/system-auth

执行上述文件后,该文件内容如下图所示:

418aa7782a6d25c60b5310333b9a39e37a7120.webp

在该文件中,找到并修改与密码质量相关的配置项,即可实现密码复杂度的设置。

Debian/Ubuntu系列

对于Debian和Ubuntu等发行版,密码复杂度的配置同样使用pam_pwquality.so模块,但配置文件位置有所不同。你需要编辑的是:

sudo nano/etc/pam.d/common-password

在这里,你可以根据需要调整密码策略参数,确保密码符合安全标准。


注意:在使用该功能之前先要确定系统是否安装了该模块。


配置项说明

password requisite pam_pwquality.so minlen=8ucredit=-2lcredit=-1dcredit=-4ocredit=-1

password 表示这个PAM模块是用于密码验证的。

requisite 是PAM模块的控制标志之一,它表示如果这个模块验证失败,接下来的验证流程会被中断,用户将无法继续登录或执行相关操作。password requisite pam_pwquality.so后面添加或修改相关配置就可以了。具体的参数设置,可以参考以下信息:

43b008747e98aa753dc8870808341f22ffffa6.webp

在大型企业或组织中,单个用户密码的管理可能没有太大挑战,但当面临大量用户时,如何批量配置密码复杂度并确保其符合安全要求就成了一个难题。那么,如何有效地进行批量管理?

通过脚本批量修改PAM配置

为了实现密码策略的高效管理,可以开发一个Shell脚本,利用sed或awk等工具对多个配置文件进行自动化批量更新。这样不仅能够显著提升工作效率,还能确保密码策略在各个系统组件中保持一致性和标准化管理。

以下是一个用于配置密码复杂度的Shell脚本示例:

update_pam_pwquality(){# 配置项
    minlen="minlen=8"ucredit="ucredit=-2"lcredit="lcredit=-1"dcredit="dcredit=-4"ocredit="ocredit=-1"# 判断 Linux 发行版并设置PAM配置文件路径if[-f/etc/os-release];then
        # 获取发行版名称
        source/etc/os-releaseDISTRO_NAME=$ID# 根据发行版选择正确的PAM配置文件case"$DISTRO_NAME"in"centos"|"rhel"|"fedora")PAM_FILE="/etc/pam.d/system-auth"PACKAGE="libpwquality"PKG_MGR="yum";;"ubuntu"|"debian")PAM_FILE="/etc/pam.d/common-password"PACKAGE="libpam-pwquality"PKG_MGR="apt-get";;"arch"|"manjaro")PAM_FILE="/etc/pam.d/system-auth"PACKAGE="libpwquality"PKG_MGR="pacman";;"opensuse")PAM_FILE="/etc/pam.d/common-password"PACKAGE="libpwquality"PKG_MGR="zypper";;*)echo"Unsupported distribution: $DISTRO_NAME"exit1;;esacelseecho"无法识别发行版,无法确定 PAM 配置文件路径"exit1fi

    # 检查并安装 pam_pwquality 模块if!rpm-q"$PACKAGE">/dev/null2>&1&&!dpkg-l"$PACKAGE">/dev/null2>&1;then
        echo"正在安装 $PACKAGE..."if!sudo $PKG_MGRinstall-y"$PACKAGE";then
            echo"安装 $PACKAGE 失败,请手动安装后重试"exit1fi
    fi

    # 备份原始PAM配置文件BACKUP_FILE="$PAM_FILE.$(date +%Y%m%d%H%M%S)"cp-p"$PAM_FILE""$BACKUP_FILE"echo"配置文件已备份到 $BACKUP_FILE"# 定位到包含"password.*pam_pwquality.so"的行
    line_number=$(grep-n"^password.*pam_pwquality.so""$PAM_FILE"|cut-d:-f1)if[[-n"$line_number"]];then
        # 获取当前行内容
        current_line=$(sed-n"${line_number}p""$PAM_FILE")# 检查并更新 minlenif[["$current_line"=~minlen=([0-9]+)]];then
            current_minlen="${BASH_REMATCH[1]}"if[["$current_minlen"!="8"]];then
                # 更新 minlen 为8current_line=$(echo"$current_line"|sed"s/minlen=$current_minlen/minlen=8/")echo"更新 minlen minlen to 8."fielse# 添加 minlen 配置
            current_line="$current_line $minlen"echo"添加 minlen=8."fi

        # 检查并更新 ucreditif[["$current_line"=~ucredit=(-?[0-9]+)]];then
            current_ucredit="${BASH_REMATCH[1]}"if[["$current_ucredit"!="-2"]];then
                # 更新 ucredit 为-2current_line=$(echo"$current_line"|sed"s/ucredit=$current_ucredit/ucredit=-2/")echo"更新 ucredit to -2."fielse# 添加 ucredit 配置
            current_line="$current_line $ucredit"echo"添加 ucredit=-2."fi

        # 检查并更新 lcreditif[["$current_line"=~lcredit=(-?[0-9]+)]];then
            current_lcredit="${BASH_REMATCH[1]}"if[["$current_lcredit"!="-1"]];then
                # 更新 lcredit 为-1current_line=$(echo"$current_line"|sed"s/lcredit=$current_lcredit/lcredit=-1/")echo"更新 lcredit to -1."fielse# 添加 lcredit 配置
            current_line="$current_line $lcredit"echo"添加 lcredit=-1."fi

        # 检查并更新 dcreditif[["$current_line"=~dcredit=(-?[0-9]+)]];then
            current_dcredit="${BASH_REMATCH[1]}"if[["$current_dcredit"!="-4"]];then
                # 更新 dcredit 为-4current_line=$(echo"$current_line"|sed"s/dcredit=$current_dcredit/dcredit=-4/")echo"更新 dcredit to -4."fielse# 添加 dcredit 配置
            current_line="$current_line $dcredit"echo"添加 dcredit=-4."fi

        # 检查并更新 ocreditif[["$current_line"=~ocredit=(-?[0-9]+)]];then
            current_ocredit="${BASH_REMATCH[1]}"if[["$current_ocredit"!="-1"]];then
                # 更新 ocredit 为-1current_line=$(echo"$current_line"|sed"s/ocredit=$current_ocredit/ocredit=-1/")echo"更新 ocredit to -1."fielse# 添加 ocredit 配置
            current_line="$current_line $ocredit"echo"添加 ocredit=-1."fi

        # 用修改后的行替换原文件中的行
        sed-i"${line_number}s|.*|$current_line|""$PAM_FILE"echo"Line updated in $PAM_FILE."elseecho"password requisite pam_pwquality.so minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1">>"$PAM_FILE"echo"密码复杂度-未符合要求-已配置"fi}
31    2025-02-27 09:00:00    Linux 密码 PAM