Как отобразить вывод для минимальной длины пароля в скрипте Bash - PullRequest
0 голосов
/ 20 октября 2019

У меня вопрос, как мне отредактировать скрипт так, чтобы, если минимальная длина пароля была больше или равнялась 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

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Учитывая опечатку (^=) в вашем grep, она, вероятно, никогда не будет работать.

Кстати, вы хотите проверить значение "minlen" в файле conf,поэтому вы должны разбить результат grep, взяв только значение после =

EG

#!/bin/bash
passminlen="$(grep -e "^minlen" /etc/security/pwquality.conf)"
if [ "${passminlen#*=}" -ge 10 ]; then
  isVulnerable="no"
else
  isVulnerable="Yes"
fi

Обратите внимание, что:

  • Я предпочел $(...) подстановка команд вместо обратных кавычек.
  • Я использовал расширение параметра , чтобы сократить вывод grep.
0 голосов
/ 20 октября 2019

Вы можете использовать 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
...