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

В этой статье я расскажу вам, как использовать bash-скрипты для автоматической генерации паролей для новых учетных записей пользователей в системе Linux.

Сценарий: Сотрудники службы поддержки тепло приняли скрипт »add-local-user.sh», оценив значительную скорость и эффективность, которую он обеспечивает при создании учетных записей. В свою очередь они посоветовали как можно улучшить этот процесс: добавить функцию автоматической генерации пароля для повышения безопасности и устранения повторяющихся задач, а также реализовать ввод имен учетных записей и комментариев прямо из командной строки для еще более быстрого выполнения операций. Эти изменения не только оптимизируют рабочий процесс команды, но и способствуют повышению общей безопасности и эффективности компании.

Требования к скрипту:

  • Он называется «add-new-local-user.sh». (Мы добавим в название слово new, чтобы обособить его от оригинального скрипта, над которым мы работали в предыдущей части).

  • Следит за тем, чтобы он выполнялся с правами суперпользователя (root). Если скрипт выполняется без прав суперпользователя, он не будет даже пытаться создать пользователя, а вернет код завершения 1.

  • Предоставляет отчет об использовании, подобный тому, что можно найти в man-странице, если пользователь не указал имя учетной записи в командной строке, и возвращает код завершения 1.

  • Использует первый аргумент, указанный в командной строке, в качестве имени пользователя для учетной записи. Все остальные аргументы в командной строке будут рассматриваться как комментарий к учетной записи.

  • Автоматически генерирует пароль для новой учетной записи.

  • Информирует пользователя, если по какой-то причине учетную запись не удалось создать. Если учетная запись не создана, скрипт должен вернуть код завершения 1.

  • Отображает имя пользователя, пароль и хост, на котором была создана учетная запись. Таким образом, сотрудники службы поддержки могут скопировать результаты выполнения скрипта, что облегчает предоставление информации новому владельцу учетной записи.

Что вам понадобится:

Шаг 1: Создайте текстовый файл под скрипт

  • Создайте в командной строке новый текстовый файл, содержащий скрипт, над которым мы будем работать.

  • Назовите скрипт «add-new-local-user.sh».

touch add-new-local-user.sh

80dac1da40a5b47c31b4a4ed011ed3dd.png

Шаг 2: Измените разрешения, чтобы получить привилегии запуска исполняемых файлов

  • По умолчанию система безопасности linux не позволяет исполнять файлы без соответствующих разрешений. Разрешения на файл можно изменить с помощью команды »chmod», за которой следуют соответствующие цифровые обозначения.

Например: chmod 755 или chmod 777

  • Для скрипта, над которым мы будем работать, укажем разрешение »755».

chmod 755 add-new-local-user.sh

286bb7ce5aa6ecb88ceb970e8d44fdce.png

Шаг 3: Создание скрипта

  • Чтобы обозначить текстовый файл как скрипт, первое, что нужно сделать, — начать первую строку с shebang. Shebang позволяет интерпретатору узнать, как выполнить файл.

  • Первая задача скрипта заключается в том, чтобы проследить, что он выполнялся с привилегиями суперпользователя.

  • Часть крипта, которую вы видите ниже, указывает пользователю в командной строке выполнить скрипт от имени sudo или root. Без привилегий суперпользователя скрипт не отработает должным образом.

ccc23a87559ea6971be668771dc9b92a.png

Раздел информации о пользователе:

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

978df19137a5b455d00c9ca71286dec5.png

  • 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, что является условным обозначением успеха.

f8bced9417715d786c5957782d39dc00.png

Весь скрипт целиком:

7705dccad004d0223e6d41fc43aff2de.png

Шаг 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.

8eeea51f85edfa7ddb3460c1c4d5b37f.png

Замените случайно сгенерированный пароль на уникальный

  • Давайте изменим пароль одного из ваших пользователей, выполнив команду «su» с указанием имени пользователя.

  • Вставьте сгенерированный пароль в раздел «current password» и нажмите Enter.

  • Введите новый пароль дважды, чтобы подтвердить изменение.

su - example
Ex: su - gbaidoo

c1bc5fd95becddcc4f402566c84194a9.png

Поздравляем, если вы дошли до этого момента, значит, вы успешно завершили этот проект! Вы узнали, как написать скрипт, который автоматически генерирует пароли для новых пользователей в системе linux, демонстрируя эффективность и безопасность системного администрирования linux!

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

Habrahabr.ru прочитано 6628 раз