
Мне интересно, как можно создать надежные пароли в Linux (как для обычных пользователей, так и для администраторов) и существуют ли специальные программы для этого.
решение1
pwgenодна из многих программ для генерации паролей
решение2
Лично я предпочитаю не использовать генератор паролей, так как сгенерированные пароли очень трудно запомнить, но одно из портативных решений — использовать/dev/urandom
Создание случайных паролей, не содержащих специальных символов, длиной 10 символов:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10`
dyxJRKldvp
Это работает путем извлечения байтов из /dev/urandom, удаления тех, которые не соответствуют шаблону, указанному в команде tr
, и ограничения их до 10 символов с помощью head
.
Создание случайных паролей, содержащих специальные символы, длиной 10 символов:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0
Это использует немного другую технику после tr
удаления нежелательных байтов, поскольку идея заключается в том, чтобы заставить его иметь по крайней мере один специальный символ. Это работает с использованием fold
команды для переноса строки в группы по 10, затем с использованием grep
для извлечения только строк, содержащих специальный символ. head
затем извлекает первый пароль, который соответствует требованиям.
решение3
Я написал этот небольшой скрипт несколько лет назад и с тех пор им пользуюсь. Если что, то это интересное злоупотребление printf
и использование прекрасной функции BASH, которую я, к сожалению, редко вижу в скриптах: typeset
.
#!/usr/bin/env bash
# Released into public domain
# Aaron Bockover, 2005
# http://abock.org
typeset -i length; length=$1
typeset -i rounds; rounds=$2
[ $rounds -lt 1 ] && rounds=1
[ $length -lt 1 ] && {
echo "Usage: $0 <length> [<rounds>]" 2>/dev/null; exit 1;
}
for ((i=0; i < $rounds; i++)); do
for ((j=0; j < $length; j++)); do
set=$(($RANDOM % 20))
if [ $set -le 6 ]; then o=65; l=26; # 35% uppercase
elif [ $set -le 13 ]; then o=97; l=26; # 35% lowercase
elif [ $set -le 17 ]; then o=48; l=10; # 20% numeric
elif [ $set -le 18 ]; then o=58; l=7; # 10% symbolic
elif [ $set -le 19 ]; then o=33; l=15; fi
ord=$(($o + $RANDOM % $l))
printf \\$(($ord / 64 * 100 + $ord % 64 / 8 * 10 + $ord % 8))
done
echo
done
решение4
Я бы еще добавилKeePassXчто дает вам возможность использовать системную энтропию для генерации надежных паролей с несколькими приятными функциями - все с использованием GUI. Он также дает вам возможность управлять паролями и сохранять их в зашифрованном файле.
Вот как выглядит интерфейс генератора паролей KPX: