Генерация случайных паролей — Linux на примере

Давайте посмотрим, как мы можем генерировать действительно случайные пароли в Linux — сначала используя только стандартные инструменты, которые уже есть в системе, затем мы рассмотрим полезные инструменты сторонних производителей.

Во-первых, нам нужен хороший источник случайности. Есть старая шутка, что лучший способ сгенерировать действительно случайную строку на Linux — это посадить нового пользователя перед vim или emacs и попросить его выйти. /dev/urandom обычно является вторым лучшим выбором.

/dev/urandom

По сути, /dev/urandom — это специальный файл, который предоставляет нам поток случайных байтов (собранных из шума окружающей среды от таких источников, как драйверы устройств).

Существует также /dev/random, но он уже почти устарел, в настоящее время редко есть веские причины для его использования.

Если вы попытаетесь прочитать /dev/urandom напрямую с помощью:

cat /dev/urandom
Войти в полноэкранный режим Выйти из полноэкранного режима

Это быстро сломало бы ваш терминал непечатаемыми символами. Поэтому нам нужен способ ограничить набор возвращаемых символов.

Когда вы работаете с переводом или фильтрацией наборов символов, tr является очень удобным инструментом (а поскольку он входит в пакет coreutils, вы почти наверняка уже имеете его в своей системе).

Мы можем определить набор символов (-c) и удалить все остальное (-d) следующим образом:

cat /dev/urandom | tr -dc a-zA-Z0-9
Войти в полноэкранный режим Выйти из полноэкранного режима

Или, чтобы удалить ненужное использование команды cat:

tr -dc a-zA-Z0-9 </dev/urandom
Войти в полноэкранный режим Выйти из полноэкранного режима

Это работает, но дает нам непрерывный поток символов, определенных в нашей кодовой таблице. Теперь нам просто нужен способ ограничить количество возвращаемых символов. Мы можем легко сделать это с помощью команды head:

tr -dc a-zA-Z0-9 </dev/urandom | head -c 15
Войти в полноэкранный режим Выйти из полноэкранного режима

head -c делает именно то, что нам нужно: она просто возвращает первые 15 байт данных из нашего потока.

И это дает нам случайный пароль из 15 символов, как и ожидалось, например:

0vp3HkQS52xqvuR
Войти в полноэкранный режим Выйти из полноэкранного режима

Энтропии этого типа пароля должно хватить для большинства случаев, но если вам нужно больше, вы можете легко включить дополнительные символы:

tr -dc 'a-zA-Z0-9_!"#$%&' </dev/urandom | head -c 15
Ввести полноэкранный режим Выйти из полноэкранного режима

Примечание: Ваш терминал может быть недоволен отсутствием символа новой строки — ни tr, ни head не добавляют символ новой строки (теоретически, мы могли бы получить его из /dev/urandom, но он будет удален tr). Это можно легко исправить, добавив после команды echo пустую команду:

tr -dc a-zA-Z0-9 </dev/urandom | head -c 15; echo
Войти в полноэкранный режим Выйти из полноэкранного режима

openssl

Если по какой-то причине вы не можете использовать /dev/urandom, openssl также может генерировать действительно случайные строки.

Если вас устраивают только символы из base64 charset, вам не нужно ничего, кроме openssl:

openssl rand -base64 15
Вход в полноэкранный режим Выйти из полноэкранного режима

или hex:

openssl rand -hex 15
Войти в полноэкранный режим Выйти из полноэкранного режима

В противном случае мы можем создать случайные байты с помощью openssl rand, но поскольку он не поддерживает потоковую передачу, нам нужно создать достаточно байт, чтобы потом отфильтровать их:

openssl rand 512 | tr -dc a-zA-Z0-9 | head -c 15
Вход в полноэкранный режим Выйдите из полноэкранного режима

Это должно дать нам результат, очень похожий на предыдущую команду с /dev/urandom.

pwgen

Теперь, когда вы знаете, как сделать это самостоятельно, стоит упомянуть инструмент pwgen, который создаст набор случайных паролей, но постарается сделать их произносимыми и легко запоминаемыми человеком.

Он доступен в официальных репозиториях большинства основных дистрибутивов, и вы можете установить его примерно так:

apt install pwgen
dnf install pwgen
pacman -S pwgen
Войти в полноэкранный режим Выйти из полноэкранного режима

Например, это создаст набор из 20 паролей по 15 символов:

pwgen 15 20
Enter fullscreen mode Выйти из полноэкранного режима

Результат примера:

zo2aiTaiveey8xi Iephohpiush4Aik Oos4Riekieshohs eisheGheeh4an5y thah1seesho0ooZ
eedeithogaiRa3i Chie9uchaigh3iz aix2Ung2oid2ivi quiavaiMie3Fahv iesho1Kughienai
UuBu4wei0hiuCas jai6OwooniNgahm ieVox0shi3xehoh oo4haaHaijaesh3 eic8aiGohcuyah5
ii5eoDooc8ui6Sh Goohei7ureetu0B ceiB3auK9eiquu0 koSoh7ea6ga7On0 uxeing6dah3haiF
Войти в полноэкранный режим Выход из полноэкранного режима

makepasswd

Существует также старый инструмент под названием makepasswd, который похож на pwgen, но он больше ориентирован на случайные, чем на произносимые пароли.

Вы можете установить его, используя что-то вроде:

apt install makepasswd
dnf install makepasswd
Войти в полноэкранный режим Выйти из полноэкранного режима

Проблема с makepasswd заключается в том, что он использует старый интерфейс /dev/random, что может вызвать проблемы с блокировкой, особенно в средах, не имеющих доступа к большому количеству источников энтропии (например, виртуальные машины).

Эквивалентный пример приведенной выше команды pwgen выглядел бы следующим образом:

makepasswd --chars=15 --count=20
Вход в полноэкранный режим Выйти из полноэкранного режима

Результат примера:

MrIYQswWdFKMbm5
S2QszHCUs1F04Ge
bzpLR4agSpqtIX0
rYw9E2psW8bnwFg
BocTzXeGda54K9i
ELQytdfXDzGGfXR
ufJuUt7d8C2KimN
CKJQos4rIHdAGv4
njTM48Ku2VJXfb9
K3qaP5WGAe6wCcg
ePD6Lr8z0GybYCz
RMrih3WpXxw0RGc
xGVeQGtWn8pq63H
LqvL7MQb8FQabDn
7J7t1Yg0e2whEUH
JuA1WxXRR6XeRPm
sG6oWN8q8SMroz1
Womp56gy0uemUjj
prnbNr5sJGGI1gw
0a6K8oebrBKhBcb
Войти в полноэкранный режим Выход из полноэкранного режима


Примечание: это вики-статья из серии BetterWays.dev: Linux на примере, вы можете найти последнюю (лучше отформатированную) версию здесь: https://betterways.dev/linux-generating-random-passwords.

Если вы находите этот тип статьи интересным, пожалуйста, дайте мне знать (с реакцией и/или комментариями).

Оцените статью
devanswers.ru
Добавить комментарий