Comments 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`
Но не нужно использовать костыли особенно такие как здесь от даты-времени
Для смены пароля юзеру не надо под него
su
читься, есть `passwd USERNAME` от рута, напримерСам по себе скрипт для добавления может быть вот таким
```bash#!/usr/bin/env bash
EXPECTED_ARGS=1
E_BADARGS=65PASS=$(tr -cd '[:alnum:]' </dev/urandom | fold -w24 | head -n1)
if [ "$EUID" -ne 0 ]
then echo "Please run as root"
exit
fiif [ $# -ne $EXPECTED_ARGS ]; then
echo "Usage: $0 new_user_name"
exit $E_BADARGS
fiuseradd -s/bin/bash -m "$1"
echo "PASS"|chpasswd
printf "user: %s\n" "PASS"
```В целом ради подобной мелочи не нужно строчить статью, но так как корп.блог то видимо KPI
Я же хочу, что бы те кому будет подобное нужно не изобретали велосипедов, а думали головой, свой пример скрипта я предложил
Про apg видимо не рассказали.
Не нужно городить костылей.
Secure Scripting: Пошаговое руководство по автоматизации генерации паролей в Linux с помощью Bash