24.08.1999, | ||
Аутентификация PAP и CHAP
| ||
Поскольку при аутентификации через CHAP мы должны высылать удалённой стороне случайный ключ и имя нашей системы, это имя необходимо задать с помощью параметра name, например, в файле /etc/ppp/options: modem crtscts asyncmap 0 name fast Если мы не укажем имя нашей системы, pppd будет использовать в этом качестве полное доменное имя компьютера, на котором его запустили, в нашем случае, dial.fast.ru. Иногда в рекомендациях по настройке pppd зачем-то используют параметр domain. Я не знаю, какая цель при этом преследуется, но этот параметр влияет только на имя нашей системы. Если мы укажем параметр domain fast.ru, то имя нашей системы станет dial.fast.ru.fast.ru. Не знаю, как Вам, но мне это совершенно не нужно. Что касается PAP, то для него имя нашей системы не обязательно, но не помешает. В принципе, для клиентов, использующих аутентификацию PAP или CHAP может вообще не быть записи в /etc/master.passwd, поскольку имена и пароли для аутентификации находятся в файлах /etc/ppp/pap-secrets и /etc/ppp/chap-secrets (для краткости мы будем называть их файлы secrets) в виде строк: max fast abcdefg *
Формат этой строки такой - имя удалённой max fast abcdefg
но там поля имеют другой смысл - имя его
В одном и том же файле могут хранится имена и пароли как для
аутентификации удалённых систем, так и для аутентификации себя.
Первые визуально отличаются наличем поля IP-адреса.
Кроме того, имя нашей системы при аутентификации удалённых систем
можно заменить igor cool 1234567 max * abcdefg * Первая строка - это наше имя и пароль для аутентификации у нашего провайдера Cool Connection, а вторая - это строка для аутентификации нашего дайлап-клиента "max". В файле /etc/ppp/pap-secrets пароль клиента может хранится не открытым текстом, а в виде результата функции crypt, например, вот так: | ||
max * $1$1q2w3e4r$UptrhXMwGUeq2z68qDcXi/ * | ||
При PAP аутентификации pppd сначала пытается сравнить присланный пароль с имеющимся и, если они не совпадают, pppd пропускает его через crypt и пытается сравнить снова. Если pppd указать параметр login, то при PAP аутентификации он будет проверять в /etc/master.passwd пароль пользователя, имя которого совпадает с именем удалённой системы. Кроме того, pppd проверит, что бы это имя не было в файле /etc/ppp/ppp.deny, а шелл этого пользователя присутствовал в файле /etc/ppp/ppp.shells. Помимо этого, проверяется срок действия аккаунта пользователя.
Если все проверки пройдут удачно, pppd запишет время работы этого пользователя в файле /var/log/wtmp. При использовании параметра login пароль клиента может вообще не храниться в /etc/ppp/pap-secrets: max * "" *
Теперь перейдем к полю адреса.
Как мы уже говорили, | ||
max * abcdefg 192.168.1.200 192.168.1.201 | ||
То есть, в нашем Если число запрещённых адресов меньше, чем разрешённых, то удобнее воспользоваться символом "!": | ||
max * abcdefg * !192.168.1.202 | ||
то есть, разрешить все и запретить 192.168.1.202. В нашем случае, это аналогично предыдущему варианту. Любые диапазоны разрешать нельзя, но можно разрешать адреса, входящие в указанную подсеть: | ||
max * abcdefg 192.168.1.200/30 | ||
то есть, разрешить все адреса с 192.168.1.200 по 192.168.1.203.
Указав в поле адреса на первом месте max * abcdefg - Того же эффекта можно достичь, вообще убрав поле адреса. Наконец, с помощью этого поля можно назначить адрес удалённой стороне: | ||
max * abcdefg :192.168.1.210 или оба адреса для данного соединения: | ||
max * abcdefg 192.168.1.2:192.168.1.210 | ||
Это назначение происходит уже после того, как pppd
назначил адреса
Может ли pppd использовать для аутентификации
одних клиентов PAP, а для других - CHAP ? В общем случае - нет.
Дело в том, что о способе аутентификации pppd договаривается
с удалённой стороной ещё до того, как эта удалённая сторона сообщит своё имя.
В результате может возникнуть следующая ситуация.
Перед тем, как определить способ аутентификации, pppd
заглядывает в файл /etc/ppp/chap-secrets и,
если он находит там хотя бы одну строку,
у которой второе поле Поэтому, если мы решили использовать CHAP, то всех клиентов под Windows придется занести в файл /etc/ppp/chap-secrets. Я бы рекомендовал использовать PAP для всех клиентов, потому что в этом случае, во-первых, пароль можно хранить в зашифрованном виде или даже в /etc/master.passwd, а во-вторых, параметр login записывает время работы клиента. Что касается того, что пароль передаётся в открытом виде по каналам связи, то для телефонных линий, на мой взгляд, это не критично. Поэтому в наш файл /usr/sbin/pppd.sh можно добавить такие параметры: #!/bin/sh /usr/sbin/pppd auth login require-pap refuse-chap Мы запрещаем CHAP, требуем PAP, используем для аутентификации /etc/master.passwd, и, кроме того, записываем время работы в файл /var/log/wtmp. |