В этой статье я расскажу вам, как использовать bash-скрипты для автоматической генерации паролей для новых учетных записей пользователей в системе Linux.
Сценарий: Сотрудники службы поддержки тепло приняли скрипт "add-local-user.sh", оценив значительную скорость и эффективность, которую он обеспечивает при создании учетных записей. В свою очередь они посоветовали как можно улучшить этот процесс: добавить функцию автоматической генерации пароля для повышения безопасности и устранения повторяющихся задач, а также реализовать ввод имен учетных записей и комментариев прямо из командной строки для еще более быстрого выполнения операций. Эти изменения не только оптимизируют рабочий процесс команды, но и способствуют повышению общей безопасности и эффективности компании.
Требования к скрипту:
Он называется "add-new-local-user.sh". (Мы добавим в название слово new, чтобы обособить его от оригинального скрипта, над которым мы работали в предыдущей части).
Следит за тем, чтобы он выполнялся с правами суперпользователя (root). Если скрипт выполняется без прав суперпользователя, он не будет даже пытаться создать пользователя, а вернет код завершения 1.
Предоставляет отчет об использовании, подобный тому, что можно найти в man-странице, если пользователь не указал имя учетной записи в командной строке, и возвращает код завершения 1.
Использует первый аргумент, указанный в командной строке, в качестве имени пользователя для учетной записи. Все остальные аргументы в командной строке будут рассматриваться как комментарий к учетной записи.
Автоматически генерирует пароль для новой учетной записи.
Информирует пользователя, если по какой-то причине учетную запись не удалось создать. Если учетная запись не создана, скрипт должен вернуть код завершения 1.
Отображает имя пользователя, пароль и хост, на котором была создана учетная запись. Таким образом, сотрудники службы поддержки могут скопировать результаты выполнения скрипта, что облегчает предоставление информации новому владельцу учетной записи.
Что вам понадобится:
Терминал Linux
Желание научиться чему-то новому)
Шаг 1: Создайте текстовый файл под скрипт
Создайте в командной строке новый текстовый файл, содержащий скрипт, над которым мы будем работать.
Назовите скрипт "add-new-local-user.sh".
touch add-new-local-user.sh

Шаг 2: Измените разрешения, чтобы получить привилегии запуска исполняемых файлов
По умолчанию система безопасности linux не позволяет исполнять файлы без соответствующих разрешений. Разрешения на файл можно изменить с помощью команды "chmod", за которой следуют соответствующие цифровые обозначения.
Например: chmod 755 или chmod 777
Для скрипта, над которым мы будем работать, укажем разрешение "755".
chmod 755 add-new-local-user.sh

Шаг 3: Создание скрипта
Чтобы обозначить текстовый файл как скрипт, первое, что нужно сделать, — начать первую строку с shebang. Shebang позволяет интерпретатору узнать, как выполнить файл.
Первая задача скрипта заключается в том, чтобы проследить, что он выполнялся с привилегиями суперпользователя.
Часть крипта, которую вы видите ниже, указывает пользователю в командной строке выполнить скрипт от имени sudo или root. Без привилегий суперпользователя скрипт не отработает должным образом.

Раздел информации о пользователе:
Наша цель заключается в том, чтобы пользователь (персонал службы поддержки) вводил имя учетной записи, а скрипт автоматически генерировал для нее случайный пароль. Каждый пользователь получит свой уникальный пароль, что избавит нас от необходимости вручную создавать пароль для каждого нового пользователя в системе linux.

USER_NAME="$1"
: Эта строка сохраняет первый аргумент, переданный скрипту, в переменнойUSER_NAME
. При запуске скрипта в качестве этого первого аргумента вы указываете имя нового пользователя.shift
: Эта команда сдвигает список аргументов скрипта таким образом, что второй аргумент становится первым, третий — вторым и так далее. Она используется здесь, потому что все остальное после первого аргумента считается комментариями к учетной записи.COMMENT="$@"
: После сдвига представляет собой все оставшиеся аргументы командной строки, которые присваиваются переменнойCOMMENT
. Они используются в качестве комментария для учетной записи пользователя.PASSWORD=$(date +%s%N | sha256sum | head -c48)
: Эта строка генерирует пароль, беря текущую дату и время в наносекундах, пропуская их через командуsha256sum
для создания хэша, а затем используяhead -c48
для получения его первых 48 символов.useradd -c "${COMMENT}" -m ${USER_NAME}
: Командаuseradd
используется для создания нового пользователя с комментарием, указанным в переменнойCOMMENT
, и именем пользователя, указанным в переменнойUSER_NAME
. Параметр-m
создает корневой каталог пользователя.if [[ "${?}" -ne 0 ]]
: Проверяет код завершения последней команды (в данном случаеuseradd
). — это специальная переменная, которая хранит статус выхода из последней выполненной команды.-ne 0
проверяет, не равен ли этот код 0, что означает, что произошла ошибка.echo 'The account could not be created.'
: Если команда создания пользователя завершилась неудачей (т.е. условиеif
истинно), в этой строке будет выведено сообщение о том, что учетную запись создать не удалось.exit 1
: Выход из скрипта и возвращение кода 1, который обычно указывает на то, что произошла ошибка.
Раздел с генерацией пароля:
echo ${PASSWORD} | passwd — stdin ${USER_NAME}: Устанавливает пароль для нового пользователя, который был введен в качестве первого аргумента. После того как пользователю будет присвоен пароль, он будет выведен в командную строку. Пароль будет передан команде passwd, которая изменит пароль в зависимости от имени пользователя.
Следующий оператор
if
проверяет, была ли командаpasswd
успешной, смотря на код завершения ($?
). Если код не равен 0 (что означает, что произошла ошибка), он выводит "The password for the account could not be set." и выходит из скрипта с кодом завершения 1, указывающим на ошибку.passwd -e ${USER_NAME}
: Эта команда заставляет нового пользователя изменить пароль при следующем входе в систему в целях безопасности.Команды
echo
выводят имя пользователя, сгенерированный пароль и хост (имя компьютера), на котором был создан пользователь. Эта информация выводится на терминал, чтобы человек, выполняющий скрипт, мог сохранить где-нибудь данные о новой учетной записи.exit 0
: Скрипт завершает работу с кодом завершения 0, что является условным обозначением успеха.

Весь скрипт целиком:
Вот весь скрипт, собранный воедино.

Шаг 4: Проверка скрипта
Теперь мы протестируем наш скрипт и посмотрим, как он работает!
Введите имя пользователя, чтобы узнать, будет ли сгенерирован пароль.
Обязательно скопируйте один из паролей и сохраните его где-нибудь. Мы будем менять его на новый уникальный пароль.
sudo ./add-new-local.user.sh exampleuser COMMENT
Ex: sudo ./add-new-local.user.sh gbaidoo George Baidoo

Пользователь №2

Пользователь №3

Если вы получите результаты, подобные тем, что можно увидеть на изображениях выше, значит, скрипт работает правильно. Отличная работа!
Попробуйте выполнить скрипт без привилегий sudo или root.
Помните, что мы написали скрипт так, чтобы его мог выполнить только пользователь с правами sudo или root. Если вы попытаетесь выполнить этот файл без соответствующих прав, вам будет отказано в доступе и предложено запустить скрипт с sudo.

Замените случайно сгенерированный пароль на уникальный
Давайте изменим пароль одного из ваших пользователей, выполнив команду "su" с указанием имени пользователя.
Вставьте сгенерированный пароль в раздел "current password" и нажмите Enter.
Введите новый пароль дважды, чтобы подтвердить изменение.
su - example
Ex: su - gbaidoo

Поздравляем, если вы дошли до этого момента, значит, вы успешно завершили этот проект! Вы узнали, как написать скрипт, который автоматически генерирует пароли для новых пользователей в системе linux, демонстрируя эффективность и безопасность системного администрирования linux!
Сегодня вечером пройдет открытый урок «Веб-сервер Angie: сравнение с Nginx, новые возможности». Занятие будет полезно для системным администраторам Linux, веб-разработчикам и всем, кто использует Nginx в своих проектах. Записывайтесь по ссылке.