Оригинал статьи находится по адресу - http://www.onlamp.com/lpt/a/4298
Взял оттуда материал и немного "подшлифовал".
В данной статье я продемонстрирую приложение из коллекции портов, которое может помочь пользователям при выборе сложных, но запоминающихся, паролей.
APG (Automated Password Generator - автоматический генератор паролей) – инструмент для генерирования случайных паролей. Он заинтриговал меня, поскольку поддерживает протокол pwdgen, определенный RFC 972. Интересно то, что хотя этот протокол доступен с 1986, большинство людей никогда не слышали о нём и не имели возможности использовать его в сети.
Давайте установим apg и увидим какую пользу оно может принести:
# cd /usr/ports/security/apg && make install clean |
Установка произошла очень быстро, а вывод занял только три четверти экрана монитора . Но за это время порт установил три утилиты: клиент apg, сервер apgd, и менеджер Bloom-фильтра, apgbfm. Каждая утилита имеет соответствующий manpage, битком набитый примерами и полезными URL-ами для дополнительного чтения. Стоит отметить то, что один из URL ссылается на NIST, Национальный Институт Стандартов и Технологии (NIST известен своими наилучшим методами безопасности), другой на - FIPS (Федеральная Стандарт по Обработке Информации).
В самом простом своем использовании, apg сгенерирует шесть произвольных паролей, в надежде, что Вы выберете один из них как пароль. Пароли будут сложными, что означает их стойкость к атаке по словарю. Для того, чтобы сделать пароли запоминающимися, включите ключ t, который покажет Вам как лучше произносить сгенерированные пароли. Вот пример:
# apg -t RicDeOs9 (Ric-De-Os-NINE) geuwocDon3 (geu-woc-Don-THREE) omfotCibta (om-fot-Cib-ta) TamJukEd8 (Tam-Juk-Ed-EIGHT) yelkibhos (yelk-ib-hos) Dridoin3 (Drid-oin-THREE) |
По умолчанию apg создает пароли длиной от восьми до десяти символов, использующих как верхний, так и нижний регистр. Тем не менее, Вы можете использовать дополнительные ключи, чтобы соответствовать любой парольной политике. Например, чтобы принудительно включить спецсимволы:
# apg -MS -t dabafjos/ (dab-af-jos-SLASH) geshk*swu (geshk-ASTERISK-swu) hutyeiz' (hut-yeiz-APOSTROPHE) wakvob)odi (wak-vob-RIGHT_PARENTHESIS-od-i) &ovyigrikl (AMPERSAND-ov-yi-gri-kl) lerdeljid[ (lerd-elj-id-LEFT_BRACKET) |
Для уверенности в том, что каждый пароль будет длиной 12 символов, определите 12 минимумом (-m) и максимумом (-x) длины пароля:
# apg -MS -m12 -x12 -t megrihyghep] (me-gri-hy-ghep-RIGHT_BRACKET) emcujlabcat! (em-cuj-lab-cat-EXCLAMATION_POINT) uctoldil'swy (uct-old-il-APOSTROPHE-swy) tygopocparj: (tyg-op-oc-parj-COLON) yedreumtutt} (ye-dreumt-utt-RIGHT_BRACE) bagcu!gedany (bag-cu-EXCLAMATION_POINT-ged-an-y) |
Если ваша политика паролей настаивает на действительно произвольных паролях, которые могут быть непроизносимыми, используйте -a1 вместо -МС:
# apg -a1 -m12 -x12 :L<@6TP@"Z^[ *pIsI_o!690C :f>SH)xj#/vO ykwL|L=2KwDp l)Lb?q*4b}0T ?h3wR>`:jPhZ |
Хм-м-м. Наверное я остановлюсь на произносимых паролях .
apg также поддерживает способность проверять произвольно сгенерированные пароли атакой по словарю как с помощью словарного файла, так и с помощью Bloom-фильтра. Если при создании произвольного пароля, найдётся совпадение в любом из файлов, apg отбросит это и сгенерирует другой пароль.
Ваша система FreeBSD поставляется со словарным файлом, который находится в /usr/share/dicts/words. Если этого файла нет в Вашей конкретной системе, Вы можете установить его, используя /stand/sysinstall, выбрав configure, затемdistributions и выбирая dict. Этот файл отсортирован по алфавиту и хранится в кодировке ASCII, что означает, что Вы можете добавить ваши собственные слова. В общем, слова добавляются так:
R00t r00t r00T |
и так далее, поскольку слова чувствительны к регистру. Рекомендовано, чтобы Вы потратили некоторое время, добавляя слова, которых Вы не хотите в качестве паролей в вашей сети. Как только Вы закончите, заключите apg в двойные кавычки и сверьте с вашим словарным файлом используя ключ -r и определяя имя файла:
# apg -MS -m12 -x12 -t -r /usr/share/dict/words plecvumpyul: (plec-vump-yul-COLON) nenyacyisej# (nen-yac-yis-ej-CROSSHATCH) hocs;quadepa (hocs-SEMICOLON-quad-ep-a) dabejyegawf' (dab-ej-yeg-awf-APOSTROPHE) neirinajaun` (neir-in-aj-aun-GRAVE) bempusaflov` (bemp-us-a-flov-GRAVE) |
Ещё лучше, найдите время, чтобы создавать Bloom файл. Утилита потребует от Вас определить как имя словаря, так и желаемое имя Bloom-файла:
# apgbfm -d /usr/share/dict/words -f ~/bloomfile Counting words in dictionary. Please wait... |
Эта команда может быть запущена обычным пользователем. В данном случае, я решил создать Bloom файл в своем домашнем каталоге. Как только файл будет сгенерирован, используйте ключ -b, чтобы сообщить apg где расположен Bloom файл:
# apg -MS -m12 -x12 -t -b ~/bloomfile pitmurresir. (pit-murr-es-ir-PERIOD) ryudkuavbuj= (ryud-ku-av-buj-EQUAL_SIGN) rinlelt{abap (rin-lelt-LEFT_BRACE-ab-ap) tykawegcerg* (tyk-aw-eg-cerg-ASTERISK) woabfifawoc? (woab-fif-aw-oc-QUESTION_MARK) /drujatwajsi (SLASH-dru-ja-twaj-si) |
Если Вы попробуете оба ключа -r и -b с apg, Вы обнаружите, что Bloom файл - значительно быстрее, так как он использует алгоритм, чтобы определять может ли быть пароль обнаруженным в словарном файле.
Последний ключ, который я упомяну, будет -s, (seed) ключ. Этот ключ рекомендован, так как он дает генератору случайных чисел начальное значение:
# apg -MS -m12 -x12 -t -b ~/bloomfile -s
Please enter some random data (only first 16 are significant) |
Обратите внимание на то, что эти пароли окончательно усложнены, но все еще довольно произносимы.
Вы можете создать сценарий оболочки так, чтобы не забывать заносить все ключи. Здесь я модифицировал предложение из man apg, чтобы включать свои желаемые ключи:
# cat /home/muff/genpasswd.sh #!/bin/sh apg -MS -m10 -x10 -t -b /home/muff/bloomfile -s |
Не забываем сделать файл исполняемым:
# chmod +x /home/muff/genpasswd.sh |
Теперь, чтобы сгенерировать пароли, можно просто набрать /home/muff/genpasswd.sh.
Другая альтернатива - создать псевдоним для команды apg. Поскольку я планирую использование apg на одной машине и я всегда работаю в C-shell (tcsh), я добавил такую строку в ~/.tcshrc:
alias apg apg -MS -m12 -x12 -t -b ~/bloomfile -s |
Теперь, когда я набираю apg, он автомагически использует все мои желаемые ключи.
Вплоть до этого момента, мы концентрировались на apg клиенте, что означает, что мы пока не использовали протокол pwdgen. Подобно любому TCP/IP протоколу, pwdgen требует как компонент клиента, так и компонент сервера. Работа компонента сервера - слушать запросы клиента на своем порту.
Cервис запустим с помощью демона inetd, для чего Вам понадобится добавить следуюющие данные в файл /etc/inetd.conf:
# echo 'pwdgen stream tcp nowait root /usr/local/sbin/apgd apgd' >> /etc/inetd.conf |
Добавим запуск супердемона inetd в rc.conf:
# echo '# INETd-service' >> /etc/rc.conf # echo 'inetd_enable="YES"' >> /etc/rc.conf |
Делее просто просто набираем inetd, чтобы запустить сервис.
# inetd |
Преимущество использования apgd - то, что Вам не нужно установить порт apg на каждом пользовательском компьютере. Когда пользователям нужно генерировать произвольные пароли, они просто соединяются с портом 129 на сервере apgd. В этом примере apgd работает на сервере pwdgen.muff.kiev.ua:
# telnet pwdgen.muff.kiev.ua 129 Trying 195.3.159.250... Connected to pwdgen.muff.kiev.ua. Escape character is '^]'. chroyskIts Vuvtibewci rudidemUn cliukmibva Cavgarsorc dyWyocks Connection closed by foreign host. |
Давайте посмотрим поближе на сгенерированные пароли. Помните, когда я добавлял строку к /etc/inetd.conf, я не включал никаких ключей на apgd. Это означает, что я получил по умолчанию от восьми до десяти букв без символов. Также отметьте отсутствие правил произношения, поскольку я не включал -t в своем inetd.
Наверное, лучше изменить эти умолчания, чтобы включить ключи, соответствующие моим сетевым парольным политикам. В моем случае строка в inetd.conf принимает следующий вид:
pwdgen stream tcp nowait root /usr/local/sbin/apgd apgd -MCN -m10 -x10 |
Обратите внимание также на отсутствие ключа -s; к несчастью, этот выбор невозможен с apgd.
Теперь необходимо сообщить inetd о изменениях. Для этого перезапустим демон:
# killall -1 inetd |
Проверим, что у нас получилось:
# telnet pwdgen.muff.kiev.ua 129 Trying 195.3.159.250... Connected to pwdgen.muff.kiev.ua. Escape character is '^]'. yijLikMek3 SpazezOac2 eirdOlibr3 kaQuabBet5 LoHygjiel6 yorj1Kneir Connection closed by foreign host. |
Если Вы решите использовать сервер apgd, советую также изменить /etc/syslog.conf чтобы следить когда пользователи используют возможность генерирования паролей. Создаем лог-файл и добавляем следующие строки в /etc/syslog.conf (во второй строке не опечатка, так и должно быть):
# touch /var/log/apgd.log # echo '\!apgd' >> /etc/syslog.conf # echo '*.info /var/log/apgd.log' >> /etc/syslog.conf |
Перезапускаем syslog, чтобы он "ознакомился" с изменениями:
# killall -1 syslogd |
Далее подключаюсь к серверу apgd и после этого ищу записи в лог-файле:
# less /var/log/apgd.log Jan 28 04:10:01 server apgd[2053]: password generation request from 127.0.0.1.49762 |
Вот и все... Подключения логгируются.
Надеюсь, что мне удалось уговорить Вас начать использовать генерацию случайных паролей. Если Вы планируете попробовать это на вашей системе или в небольшой сети, можете предпочесть устанавливать порт apg на каждом компьютере. Для большой сети установите и сконфигурируйте apgd на одном из ваших серверов и расскажите пользователям как, подключаться к серверу apgd.
Re: APG - генератор паролей
Есть хороший веб-интерфейс к этой замечательной программе -не надо пугать пользователей "ужасным" видом консоли.