Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在Bash脚本中显示密码最小长度的输出_Linux_Bash_Scripting_Audit - Fatal编程技术网

Linux 如何在Bash脚本中显示密码最小长度的输出

Linux 如何在Bash脚本中显示密码最小长度的输出,linux,bash,scripting,audit,Linux,Bash,Scripting,Audit,我的问题是,如何编辑脚本,以便在密码最小长度大于或等于10时,它将显示“漏洞:否” 提前感谢。:) 我的脚本 #!/bin/bash passminlen=`grep "^minlen /etc/security/pwquality.conf` if [[ $passminlen == "minlen=10" ]] then isVulnerable="no" else isVulnerable="Yes" fi echo echo "Audit Criteria: Password min

我的问题是,如何编辑脚本,以便在密码最小长度大于或等于10时,它将显示“漏洞:否”

提前感谢。:)

我的脚本

#!/bin/bash

passminlen=`grep "^minlen /etc/security/pwquality.conf`
if [[ $passminlen == "minlen=10" ]]
then
isVulnerable="no"
else
isVulnerable="Yes"
fi
echo
echo "Audit Criteria: Password minimum length is 10 or greater"
echo "Vulnerability: $isVulnerable"
echo "Details: See Below"
echo
echo "Source of info:"
echo "grep ^minlen /etc/security/pwquality.conf
echo
echo "Output: $passminlen"
echo
echo "Remediation: "
echo "If password minimum length is lesser than 10 please edit the following under /etc/security/pwquality.conf."
echo

您可以使用
awk-F='$1==“minlen”{print$2}'/etc/security/pwquality.conf
以普通数字的形式获取最小长度。
-F=
告诉
awk
在“=”字符上拆分行,脚本检查字段#1(在“=”之前)是否为“minlen”,如果是,则打印字段#2(在“=”之后)

还有几件事需要注意;首先,可能没有定义minlen,所以您需要检查它。您可能需要检查多个定义。另外,在bash中进行数字比较时,最简单的方法是使用
(())
而不是
[[]]]
。我建议使用
$()
而不是反勾号

大概是这样的:

passminlen=$(awk -F= '$1=="minlen" {print $2}' /etc/security/pwquality.conf)

if [[ -z "$passminlen" ]]
then    # Minimum length is not defined
    isVulnerable="yes"

elif [[ "$passminlen" = *$'\n'* ]]
then    # Minimum length is multiply defined; this is weird
    isVulnerable="yes"

elif (( $passminlen" >= 10 ))
then
    isVulnerable="no"

else
    isVulnerable="Yes"
fi

您要做的是检查conf文件中“minlen”的值,因此您应该中断grep的结果,只取
=

例如

请注意:

  • 我更喜欢使用
    $(…)
    命令替换而不是反引号
  • 我用它来减少grep的输出

grep“^minlen/etc/security/pwquality.conf”的输出添加到您的问题中。啊,非常感谢您为参数扩展提供的链接是我所需要的,因为我一直在尝试将minlen和=。
#!/bin/bash
passminlen="$(grep -e "^minlen" /etc/security/pwquality.conf)"
if [ "${passminlen#*=}" -ge 10 ]; then
  isVulnerable="no"
else
  isVulnerable="Yes"
fi