RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
apg, или автоматический генератор пароля, заинтриговал меня, поскольку он поддерживает протокол pwdgen, определенный RFC 972. Да, я знаю, мне нужно выходить более часто, но интересно то, что хотя этот протокол доступен с 1986, большинство людей никогда не слышали о нём и не имели возможности использовать его в сети.
Давайте установим это приложение и увидим, какую пользу оно может принести:
% cd /usr/ports/security/apg
% make install clean
Порт установил три утилиты: клиент apg, сервер apgd, и менеджер Bloom-фильтра, apgbfm. Каждая утилита имеет соответствующий manpage, битком набитый примерами и полезными URL-ами для дополнительного чтения.
В самом простом своем использовании, apg сгенерирует шесть произвольных паролей, в надежде, что вы выберете один из них как пароль. Пароли будут сложными, что означает их стойкость к атаке по словарю. Для того, чтобы сделать пароли запоминающимися, включите ключ t, который покажет вам, как лучше произносить сгенерированные пароли. Вот пример:
По умолчанию apg создает пароли длиной от восьми до десяти символов, использующих как верхний, так и нижний регистр. Тем не менее, вы можете использовать дополнительные ключи, чтобы соответствовать любой парольной политике. Например, чтобы принудительно включить символы:
Хммм. Я думаю, лучше я займусь произносимыми паролями.
apg также поддерживает способность проверять произвольно сгенерированные пароли атакой по словарю как с помощью словарного файла, так и с помощью Bloom-фильтра. Если при создании произвольного пароля найдётся совпадение в любом из файлов, apg отбросит это и сгенерирует другой пароль.
Ваша система FreeBSD поставляется со словарным файлом, который находится в /usr/share/dicts/words. Если этого файла нет в вашей конкретной системе, вы можете установить его, используя /stand/sysinstall, выбрав configure, затемdistributions и выбирая dict. Этот файл отсортирован по алфавиту и хранится в кодировке ASCII, что означает, что вы можете добавить ваши собственные слова. В общем, слова добавляются так:
R00t
r00t
r00T
и так далее, поскольку слова чувствительны к регистру. Рекомендовано, чтобы вы потратили некоторое время, добавляя слова, которых вы не хотите в качестве паролей в вашей сети. Как только вы закончите, заключите apg в двойные кавычки и сверьте с вашим словарным файлом используя ключ -r и определяя имя файла:
% apg -MS -m14 -x14 -t -r /usr/share/dict/words
Ещё лучше, найдите время, чтобы создавать Bloom файл. Утилита потребует от вас определить как имя словаря, так и желаемое имя Bloom-файла:
% apgbfm -d /usr/share/dict/words -f ~/bloomfile
Counting words in dictionary. Please wait...
Эта команда может быть запущена обычным пользователем. В данном случае, я решила создать Bloom файл в своем домашнем каталоге. Как только файл будет сгенерирован, используйте ключ -b, чтобы сообщить apg где расположен Bloom файл:
% apg -MS -m14 -x14 -t -b ~/bloom
Если вы попробуете оба ключа -r и -b с apg, вы обнаружите, что Bloom файл - значительно быстрее, так как он использует алгоритм, чтобы определять может ли быть пароль обнаруженным в словарном файле.
Последний ключ, который я упомяну, будет -s, (seed) ключ. Этот ключ рекомендован, так как он дает генератору случайных чисел начальное значение:
% apg -MS -m14 -x14 -t -b ~/bloom -s
Please enter some random data (only first eight are significant)
(eg. your old password):>
jasvafwabvoud, (jas-vaf-wab-voud-COMMA)
rhylpoj:oruch~ (rhylp-oj-COLON-or-uch-TILDE)
dibogcewbowug{ (dib-og-cewb-ow-ug-LEFT_BRACE)
abun`frelfoksi (ab-un-GRAVE-frelf-oks-i)
dircunittanas" (dirc-un-itt-an-as-QUOTATION_MARK)
rhaph"drockeet (rhaph-QUOTATION_MARK-droc-keet)
Обратите внимание на то, что эти пароли окончательно усложнены, но все еще довольно произносимы.
Для тех кто предпочитает графические утилиты, автор apg выпустил также front-end tkAPG. Порта для этой утилиты не существует, но она легко установится на вашу систему FreeBSD. Скачайте исходники. Как только вы загрузили файл, разархивируйте его и перейдите во вновь созданный каталог:
% tar xzvf tkapg-0.0.2a.tar.gz
% cd tkapg-0.0.2a
Этот каталог содержит файл README и файл сценария, именуемый tkapg. Откройте сценарий в вашем любимом редакторе и замените строку:
exec wish "$0" "$@"
на:
exec /usr/local/bin/wish8.3 "$0" "$@"
Как только вы сохранили изменения, перейдите в X Window, откройте xterm, перейдите в каталог tkapg-0.0.2a и введите:
% ./tkapg
Всплывет небольшое окошко, ожидающее вас для генерации случайного пароля. Я нашла графический интерфейс несколько более медленным, чем командная строка. И он не даёт возможности задавать ключи. Тем не менее, найдите время, чтобы опробовать его, так как это может удовлетворить ваши потребности в выборе пароля.
Если вы решите заняться командной строкой, вы можете создать сценарий оболочки так, чтобы не забывать заносить все ваши выборы. Здесь я модифицировала предложение из man apg, чтобы включать свои желаемые выборы:
% vi ~dlavigne6/bin/pwgen.sh
#!/bin/sh
apg -MS -m14 -x14 -t -b /usr/home/dlavigne6/bloom -s
Как только я сохраню этот файл, мне нужно сделать его исполняемым:
% chmod +x ~dlavigne6/bin/pwgen.sh
Когда я хочу сгенерировать произвольные пароли, я просто набираю:
% pwgen.sh
Если вы хотите протестировать ваш сценарий немедленно и вы используете C-shell, наберите rehash, иначе она не найдет вашу новую программу.
Другая альтернатива - создать псевдоним для команды apg. Поскольку я планирую использование apg на одной машине и я всегда работаю в C-shell, я добавила такую строку в ~/.cshrc:
% alias apg /usr/local/bin/apg -MS -m14 -x14 -t -b /usr/home/dlavigne6/bloom -s
Теперь, всякий раз, когда я набираю apg, он автоматически использует все мои желаемые ключи. Кроме того, если вы хотите протестировать ваш псевдоним немедленно, скажите оболочке C перечитывать свой файл конфигурации:
% source ~dlavigne6/.cshrc
Вплоть до этого момента, мы концентрировались на apg клиенте, что означает, что мы пока не использовали протокол pwdgen. Подобно любому TCP/IP протоколу, pwdgen требует как компонент клиента, так и компонент сервера. Работа компонента сервера - слушать запросы клиента на своем порту. Чтобы определять, на каком именно, выполняем:
Как только вы сохранили изменения, просто наберите inetd, чтобы запустить сервис. Кроме того, если у вас уже запущен inetd для других сервисов, перезапустите его:
% killall -1 inetd
Эта команда должна показывать inetd прослушивающий порт TCP 129:
% sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root inetd 92412 4 tcp4 *:129 *:*
Преимущество использования apgd - то, что вам не нужно устанавливать порт apg на каждом пользовательском компьютере. Когда пользователям нужно генерировать произвольные пароли, они просто соединяются с портом 129 на сервере apgd. В этом примере apgd работает на сервере с IP-адресом 10.0.0.1:
% telnet 10.0.0.1 129
Trying 10.0.0.1...
Connected to 10.0.0.1.
Escape character is '^]'.
AilEjmacGa
yotgakki
DrehojOird
yejBabif
albEifia
jolnapt6
Connection closed by foreign host.
Обратите внимание на несколько вещей. Прежде всего, не дёргайтесь из-за слова telnet. Небезопасный telnet сервис не запущен на 10.0.0.1. Просто я использовала telnet, чтобы напрямую связаться с портом 129 pwdgen. В сущности, telnet действует как apg клиент.
Во-вторых, используя этот метод, пользователь не может управлять опциями использованными apg, используя преконфигурированные на сервере. В зависимости от вашей политики безопасности, это может быть просто подарком, так как пользователи не смогут сгенерировать простые пароли.
Давайте посмотрим поближе на сгенерированные пароли. Помните, когда я добавляла строку к /etc/inetd.conf, я не включала никаких ключей на apgd. Это означает, что я получила по умолчанию от восьми до десяти букв без символов. Также отметьте отсутствие правил произношения, поскольку я не включала -t в своем inetd.
Наверное, лучше изменить эти умолчания, чтобы включить ключи, соответствующие моим сетевым парольным политикам:
Обратите внимание, что теперь это одна очень длинная линия (перенос сделан для этой статьи). Убедитесь, что вы не используете редактор, который пытается разбить это на две линии. Я также создала Bloom файл в директории, которая доступна всем пользователям, а не в одной домашнем каталоге конкретного пользователя. Обратите внимание также на отсутствие ключа -s; к несчастью, этот выбор невозможен с apgd.
Наконец, я также должна сообщить inetd об изменениях:
% killall -1 inetd
Теперь, когда пользователь присоединяется к серверу apgd, происходит следующее:
% telnet 10.0.0.1 129
Trying 10.0.0.1...
Connected to 10.0.0.1.
Escape character is '^]'.
yeog-flaysdok: (ye-og-HYPHEN-flays-dok-COLON)
caijpyfratcef| (caij-py-frat-cef-VERTICAL_BAR)
ajyafdiwubaig] (aj-yaf-di-wub-aig-RIGHT_BRACKET)
nohoktegrogib( (no-hok-te-grog-ib-LEFT_PARENTHESIS)
nobkarcyonnip= (nob-karc-yonn-ip-EQUAL_SIGN)
hirkadlarjiaf[ (hirk-ad-larj-iaf-LEFT_BRACKET)
Connection closed by foreign host.
Если вы решите использовать сервер apgd, вы можете также изменить /etc/syslog.conf чтобы следить когда пользователи используют эту услугу. Давайте посмотрим, что случится, если я добавляю эти строки в конец /etc/syslog.conf:
!apgd
*.info /var/log/apgd.log
Чтобы сообщить syslog о наших изменениях:
% killall -1 syslogd
Oct 19 12:40:36 syslogd: /var/log/apgd.log: No such file or directory
Ой. Я забыла создать этот log-файл:
% touch /var/log/apgd.log
% killall -1 syslogd
Далее, я проверю результат, присоединившись к серверу apgd:
% telnet localhost 129
<output snipped>
и найду это подсоединение в логе:
% more /var/log/apgd.log
Oct 19 12:43:01 genisis apgd[92692]:
password generation request from 127.0.0.1.49334
Это не самое длинное описание регистрации входа. У меня есть запись с IP адресом, в данном случае это localhost, использованным протоколом pwdgen и временем.
Я надеюсь, что мне удалось уговорить вас начать использовать генерацию случайных паролей. Если вы планируете попробовать это на вашей системе или в небольшой сети, вы можете предпочесть устанавливать порт apg на каждом компьютере. Для большей сети, установите и сконфигурируйте apgd на одном из ваших серверов и покажите вашим пользователям, как подключаться к порту 129.