10.06.1999, © Igor Sysoev, igor@nitek.ru

 

Провайдим с помощью mgetty

 

В нашем далеком от совершенства мире большинство средств коммуникации напрочь не понимают спартанский диалог "ogin:/assword:", выдаваемый getty. К ним относятся, например, фидошные звонилки, ну и, конечно, факсы. Кроме того, можно упростить входящие PPP- и UUCP-соединения, если обрабатывать их сразу с помощью pppd и uucico, а не вызывать эти команды через login. Для того, чтобы избежать этот диалог, можно установить mgetty, обладающую такими полезными свойствами:

  • После того, как mgetty выдаёт стандартный "login:", она может распознать LCP-кадры и вызвать, например, pppd. Таким образом, мы можем провести PAP или CHAP аутентификацию, минуя диалог ""ogin:/assword:"". В принципе, как мы уже видели, подобное умеет делать и getty.

    Для этого нужно собрать mgetty с ключом -DAUTO_PPP. Если Вы будете устанавливать mgetty из порта, то она собирётся с этим ключом.

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

  • Перед выдачей приглашения "login:" mgetty может выдать "**EMSI_REQA77E", и если на другой стороне находится какой-либо фидошный пакет и он начнет фидошную сессию, то mgetty это поймет и может вызывать, например, ifcico.

    Для этого нужно собрать mgetty с ключом -DFIDO.

  • Для некоторых пользователй mgetty может вызывать не login, а что-нибудь иное, например, для всех пользователей, имена которых начинаются на UU, mgetty может вызывать uucico. В этом случае, нам не нужно заводить специального пользователя для каждого uucp-клиента.

  • И, наконец, mgetty гораздо интеллектуальнее в работе с модемом, чем стандартная getty.

Для того, что бы собрать mgetty из порта, Вам нужно выполнить следующие команды:

fetch -h ftp.freebsd.org \
      -c /pub/FreeBSD/FreeBSD-stable/ports/comms \
      -f mgetty+sendfax.tar
tar xvf mgetty+sendfax.tar
cd mgetty+sendfax
make

После успешной сборки Вы можете установить mgetty командой:

make install

Во время установки Вам будет задан ряд вопросов касательно порта и модема, и если Вы ответите на них вменяемо, то получите вполне рабочую конфигурацию. Я не буду останавливатся на этом, подробности Вы можете найти сайте mgetty. Отмечу лишь, что, если Вы устанавливаете mgetty на устройство, скажем, cuaa1, а до этого на ttyd1 у Вас было getty, то после установки Вам необходимо будет изменить строку для ttyd1 в файле /etc/ttys:

 
ttyd1   "/usr/libexec/getty std.57600"  dialup  off insecure

В самом конце этого файла Вы найдете новую строку для cuaa1, добавленную туда при установке:

 
cuaa1   "/usr/local/sbin/mgetty"        unknown on insecure

После того, как все изменения сделаны, нужно перестартовать init:

kill -1 1

Для того, что бы mgetty распознавала LCP-кадры нужно раскомментировать строку в /usr/local/etc/mgetty+sendfax/login.conf:

 
#/AutoPPP/ -    a_ppp   /usr/sbin/pppd auth +chap +pap login debug

А ещё лучше немного изменить на

 
/AutoPPP/  -    a_ppp   /usr/sbin/pppd auth refuse-chap require-pap login debug

+pap - это старый способ записи параметра require-pap. Кроме того, мы запрещаем CHAP по соображениям, описанным в статье Аутентификация PAP и CHAP.

Когда pppd запускается mgetty, параметр login делает такие записи в файл /var/log/wtmp:

 
max      cuaa1    :PPP             Mon Jun  7 20:20 - 20:35  (00:15)
a_ppp    cuaa1    14400/ARQ/V42b   Mon Jun  7 20:20 - 20:20  (00:00)

Такое поведение параметра login присуще только pppd, входящему в комплект FreeBSD. О других отличиях читайте в статье Сравнение версии pppd, входящей в дистрибутив FreeBSD, c обычной версией