Персональный | |
Модная аутентификация - PAP и CHAP
05.03.1999 До сих пор наш скрипт сам выполнял аутентификацию, то есть, вводил имя и пароль в ответ на запросы удалённой стороны. Но PPP предусматривает и свои способы аутентификации PAP (Password Authentication Protocol) и CHAP (Challenge Handshake Authentication Protocol) и мы можем ими воспользоваться, если удалённая сторона достаточна сообразительна, чтобы не только выдать "login:", но и провести PAP или CHAP аутентификацию. Нужно заметить, что комбинация FreeBSD +
Так как наш скрипт дозвонки
больше не будет заниматься аутентификацией,
нужно убрать из него имя пользователя "igor",
его пароль "1234567" и
ошибку аутентификации ABORT "ERROR" \ ABORT "NO DIALTONE" \ TIMEOUT 5 \ "" "AT" \ "OK" "ATZ" \ "OK" "ATS7=120" \ ABORT "BUSY" \ ABORT "NO ANSWER" \ ABORT "NO CARRIER" \ "OK" "ATDP$1" \ TIMEOUT 125 \ "CONNECT" "\\с" \ TIMEOUT 30 \ "login:" "\\с" if [ "$?" = "0" ]; then exit 0 fi Теперь скрипт заканчивает работу сразу же, как получит строку "login:". Отметим, что приглашение "login:" не имеет никакого отношения к PAP и CHAP, и pppd воспринимает его не более, как шум в линии, поэтому вместо этой строки может быть любое другое приглашение провайдера, в крайнем случае, "}".
PAP аутентификация происходит следующим образом при установлении
PPP-соединения удалённая сторона предлагает нам аутентификацию PAP.
Мы соглашаемся и затем передаём наше имя и пароль открытом текстом.
Если удалённую сторону имя и пароль устраивает, то аутентификация
считается успешной.
Имена и пароли для PAP хранятся в файле igor cool 1234567 Формат этой строки таков наше имя, имя удалённой стороны и пароль. В PAP используется только наше имя и пароль, а имя удалённой стороны "cool" может быть произвольным. В принципе, оно нужно только для того, чтобы pppd мог определить, какой пароль нужно использовать в случае, когда Вы используете одно и то же имя у разных провайдеров, например: igor cool 1234567 igor citynet 7654321 Теперь мы можем звонить провайдеру: pppd cuaa0 57600 lock connect '/etc/ppp/dial' \ user igor remotename cool \ defaultroute noipdefault debug
Параметры user igor и remotename cool
позволяют однозначно определить, какой пароль использовать
при аутентификации, в данном случае это 1234567.
Как уже говорилось, параметр remotename необходим только,
если мы не можем однозначно выбрать пароль из файла
CHAP аутентификация происходит следующим образом при установлении PPP-соединения удалённая сторона предлагает нам аутентификацию CHAP. Мы соглашаемся, и удалённая сторона высылает нам ключ (challenge), состоящий из случайной последовательности символов, и своё имя. Мы берём наш пароль и присланный ключ и прогоняем их через алгоритм MD5. Получившийся результат высылаем вместе со своим именем. Удалённая сторона, зная наш пароль и высланный её ключ, в свою очередь, проделывает то же самое у себя, и если её результат совпадает с присланным нами, то аутентификация считается успешной. Таким образом, пароль не передаётся в открытом виде, но удалённая сторона должна хранить наш пароль в открытом виде.
Имена и пароли для CHAP хранятся в файле igor cool 1234567 Теперь наша строка для звонка провайдеру выглядит так: pppd cuaa0 57600 lock connect '/etc/ppp/dial' \ user igor \ defaultroute npipdefault debug
Обратите внимание, что она отличается от PAP только
отсутствием параметра remotename. Это объясняется тем,
что удалённая сторона сама говорит своё имя, поэтому её имя,
записанное в файле
Может ли pppd аутентифицировать себя
в одних случаях через PAP, а в других через CHAP ? Ответ да.
При запуске pppd проверяет, как он может
аутентифицировать себя, исходя из локального имени и имени
удалённой стороны, то есть, есть ли в файлах Кроме того, можно указать pppd, чтобы он не соглашался проводить аутентификацию тем или иным способом или же требовал какого-то одного способа с помощью различных комбинаций параметров refuse-pap, refuse-chap, require-pap и require-chap. Раньше эти параметры назывались соответственно -pap, -chap, +pap и +chap. (C) Игорь Сысоев |