Как стать автором
Обновить

Secure Scripting: Пошаговое руководство по автоматизации генерации паролей в Linux с помощью Bash

Время на прочтение5 мин
Количество просмотров1.9K
Всего голосов 8: ↑5 и ↓3+3
Комментарии4

Комментарии 4

есть отличный пакет для генерирования паролей. Есть во многих дистрибьютивах по-умолчанию

pwgen - generate pronounceable passwords

$ pwgen -N1 -s 12
Py7nUGQln1mv

Понятно, что статья ради того, чтобы записались на курс. Но зачем все скрипты в виде картинок не лучшего качества публиковать (может конечно стал хуже видеть :)

И скрипт нужно немного подправить
#!/bin/bash
# Creating a script that adds a new user on a local system.
# A username must be supplied as an argument to the script.
# Optionally, provide a comment for the account as an argument.
# A password will be automatically generated for the account.
# The username, password, and host for the account will be displayed.
# Make sure the script is being executed with superuser privileges.

if [[ "${UID}" -ne 0 ]]
then
    echo 'Please run with sudo or as root.'
    exit 1
fi

# If they don't supply at least one argument, then give them help.
if [[ "${#}" -lt 1 ]]
then
    echo "Usage: ${0} USER_NAME [COMMENT]..."
    echo 'Create an account on the local system with the name of USER_NAME and comment field of COMMENT.'
    exit 1
fi

# The first parameter is the user name
USER_NAME="${1}"
# The rest of the parameters are for the account comments.
shift
COMMENT="${@}"

# Generate a password
PASSWORD=$(date +%s%N | sha256sum | head -c48)

# Create the account.
useradd -c "${COMMENT}" -m ${USER_NAME}

# Check to see if the useradd command succeeded
# We don't want to tell the user that an account was created when it hasn't been.
if [[ "${?}" -ne 0 ]]
then
    echo 'The account could not be created.'
    exit 1
fi

# Set the password
echo ${PASSWORD} | passwd --stdin ${USER_NAME}

# Check to see if the passwd command succeeded.
if [[ "${?}" -ne 0 ]]
then
    echo 'The password for the account could not be set.'
    exit 1
fi

# Force password change on first login.
passwd -e ${USER_NAME}

# Display the username, password, and the host where the user was created.
echo
echo 'username:'
echo "${USER_NAME}"
echo
echo 'password:'
echo "${PASSWORD}"
echo

Ох. Это все настолько плохо, что я даже решил зарегистрироваться

1. Не нужно придумывать костылей для генерации паролей, если есть необходимость в их генерации. Нужно использовать стандартные утилиты.
Есть специализированные утилиты с заданием нужны ли спец.символы и прочее, нужны ли цифры, ну и далее по списку. Как простейший пример pwgen. Можно добавить в скрипт проверку есть ли он и сообщение о необходимости доустановки

Можно не использовать pwgen и его аналоги, а использовать openssl, который есть на всех системах. Примерно так `openssl rand -base64 12`
Можно вообще ничего не использовать из внешних зависимостей и сделать так `tr -cd '[:alnum:]' </dev/urandom | fold -w16 | head -n1`

Но не нужно использовать костыли особенно такие как здесь от даты-времени

  1. Для смены пароля юзеру не надо под него suчиться, есть `passwd USERNAME` от рута, например

  2. Сам по себе скрипт для добавления может быть вот таким
    ```bash

    #!/usr/bin/env bash

    EXPECTED_ARGS=1
    E_BADARGS=65

    PASS=$(tr -cd '[:alnum:]' </dev/urandom | fold -w24 | head -n1)

    if [ "$EUID" -ne 0 ]
    then echo "Please run as root"
    exit
    fi

    if [ $# -ne $EXPECTED_ARGS ]; then
    echo "Usage: $0 new_user_name"
    exit $E_BADARGS
    fi

    useradd -s/bin/bash -m "$1"

    echo "1:PASS"|chpasswd

    printf "user: %s\n" "1PASS"
    ```

    В целом ради подобной мелочи не нужно строчить статью, но так как корп.блог то видимо KPI

    Я же хочу, что бы те кому будет подобное нужно не изобретали велосипедов, а думали головой, свой пример скрипта я предложил

Зарегистрируйтесь на Хабре, чтобы оставить комментарий