Библиотека сайта rus-linux.net
Авторизация и PPP
С PPP каждая система может требовать, чтобы другой конец линии опознал себя, используя один из двух опознавательных протоколов. Это Password Authentication Protocol (PAP) и Challenge Handshake Authentication Protocol (CHAP). Когда связь установлена, каждый может запросить другой конец линии, чтобы опознать себя, независимо от того, является ли он вызывающим или вызываемым. Ниже я буду говорить о "клиенте" и "сервере", когда захочу сделать различие между системой опознания и аутенфикатором. PPP daemon может спрашивать о подлинности, посылая LCP-запрос конфигурации, опознающий желаемый протокол.
PAP против CHAP
PAP в основном работает как нормальная процедура входа в систему. Клиент опознает себя, посылая имя пользователя и пароль серверу, который сравнивает их с базой данных. Этот метод легко уязвим для посторонних наблюдателей, которые могут попытаться получить пароль, слушая последовательную линию.
CHAP не имеет этих недостатков. С CHAP аутенфикатор (сервер) посылает беспорядочно сгенерированную "challenge"-строку клиенту, наряду с именем хоста. Клиент использует имя хоста (hostname) для того, чтобы искать соответствующий шифр, объединяет его с challenge и шифрует строку, используя однонаправленную hash-функцию. Результат будет возвращен на сервер наряду с hostname клиента. Сервер теперь выполняет те же самые вычисления и опознает клиента.
Другая особенность CHAP то, что он не требует опознания клиента для опознания самого себя при запуске, но посылает challenge в определенные промежутки времени, чтобы удостовериться, не был ли клиент заменен злоумышленником, например, переключив телефонные линии.
Пакет pppd хранит секретные ключи для CHAP и PAP в
двух отдельных файлах, называемых соответственно
/etc/ppp/pap-secrets
и
/etc/ppp/chap-secrets
. Записывая удаленный хост в
один или другой файл, Вы имеете хороший контроль над CHAP или PAP.
По умолчанию pppd не требует установления
подлинности удаленной машины, но соглашается опознавать себя, когда она
запросит опознание. Так как CHAP намного более совершенен, чем PAP,
pppd пробует использовать его всякий раз, когда это
возможно. Если удаленная машина этого не поддерживает, или если
pppd не может найти CHAP-шифр для удаленной системы в
файле chap-secrets
, он возвращается к PAP. Если он
не имеет также и PAP-шифра, то связь закроется.
Это поведение может быть изменено. Например, когда дается ключевое слово
auth
, pppd требует, чтобы
другой конец линии опознал сам себя. pppd согласится
использовать CHAP или PAP для этого, как только будет имеет соответствующий
шифр в базе данных CHAP или PAP соответственно. Имеются другие опции, чтобы
включить или выключить частный опознавательный протокол, но я не буду
описывать их здесь.
Если все системы, с которыми Вы работаете по PPP соглашаются опознавать
самих себя, Вы должны поместить опцию auth
в
глобальный файл /etc/ppp/options
и определить
пароли для каждой системы в файле chap-secrets
.
Если система не поддерживает CHAP, добавьте запись к файлу
pap-secrets
. Таким образом, Вы можете
удостовериться в том, что никакая неопознанная система не соединяется с
Вашим хостом.
Следующие два раздела обсуждают два PPP файла шифров:
pap-secrets
и
chap-secrets
. Они размещены в
/etc/ppp
и содержат тройки клиентов, серверов и
паролей, необязательно сопровождаемых списком адресов IP. Интерпретация
клиента и сервера отлична для CHAP и PAP.
Файл для CHAP
Когда надо опознать себя с некоторым сервером, используя CHAP,
pppd ищет в файле
chap-secrets
запись с именем клиента, равным
локальному hostname, и именем сервера, равного удаленному hostname,
посланному в CHAP Challenge. При требовании опознавания себя роли просто
поменялись: pppd будет искать запись с именем клиента,
приравненным к удаленному hostname (посланному в CHAP-ответе клиенту) и
имя сервера, приравненное локальному хосту.
Типовой файл chap-secrets
для
vlager:
# CHAP secrets for vlager.vbrew.com # # client server secret addrs #--------------------------------------------------------------------- vlager.vbrew.com c3po.lucas.com "Use The Source Luke" vlager.vbrew.com c3po.lucas.com vlager.vbrew.com "arttoo! arttoo!" c3po.lucas.com * vlager.vbrew.com "TuXdrinksVicBitter" pub.vbrew.com |
При установлении PPP-связи с c3po,
c3po просит
vlager опознать себя, используя CHAP и
посылая CHAP challenge. Затем pppd просматривает файл
chap-secrets
для записи с клиентской областью,
приравненой к vlager.vbrew.com и областью
сервера, приравненной к c3po.lucas.com, и
находит первую строку, показанную выше. Затем производится CHAP-ответ из
challenge string и шифра (Use The Source Luke
) на
машину c3po.
В то же самое время pppd составляет CHAP challenge
для c3po, содержащую уникальную challenge
string, и полностью квалифицированное доменное имя
vlager.vbrew.com. В ответ
c3po создает CHAP-ответ способом, который мы
только что обсудили, и возвращает его vlager.
Теперь pppd извлекает клиентский hostname
(c3po.vbrew.com) из ответа и ищет в
файле chap-secrets
строку, соответствующую
c3po как клиенту и
vlager как серверу. Вторая строка задает
pppd объединить CHAP challenge с паролем
(arttoo! arttoo!
), зашифровать результат и сравнить
CHAР-ответом c3po.
Произвольное четвертое поле перечисляет адреса IP, которые допустимы для
клиентов в первом поле. Адреса могут быть заданы в dotted quad notation или
как имена машин, которые будут найдены через сервер имен. Например, если
c3po запросил во время IPCP-переговоров
использование IP-адреса, который не в этом списке, запрос будет отклонен, и
IPCP будет выключено. В типовом файле, показанном выше,
c3po будет ограничен использованием
собственного адреса. Если поле адреса пусто, будут позволяться любые адреса.
Задание тире (-
) запрещает использование IP-адреса.
Третья строка в примере файла chap-secrets
позволяет любому хосту установить связь PPP с
vlager потому, что *
в поле клиента или сервера соответствует любому hostname. Единственое
требование: он знает пароль и использует адрес
pub.vbrew.com. Запись с групповым символом
для имен машин может появится где угодно в файле шифров, так как
pppd будет всегда использовать наиболее подходящую
запись, которая применима к паре сервер/клиент.
gethostname(2)
.
Если Вы установили имя системы в Ваше неквалифицированное hostname, то должны
задать для pppd опцию domain
:
#
|
Это добавит имя домена Brewery к vlager
для всех действий по авторизации. Для локального имени интересны также
опции usehostname
и name
.
Когда Вы задаете локальный IP-адрес в командной строке, используя
local
:
remote
и имя
local
вместо IP-адреса,
pppd использует его как локальный hostname.
Файл для PAP
Файл шифров PAP очень похож на тот, который используется CHAP. Первые два поля всегда содержат имена пользователя и сервера, третье поле хранит шифр PAP. Когда удаленная машина посылает запрос опознания, pppd использует запись, которая имеет поле сервера равное локальному hostname, и поле пользователя, равное имени пользователя, посланному в запросе. Когда опознание произойдет, pppd выберет шифр, который будет послан с полем пользователя, приравненным к локальному имени пользователя, и полем сервера, приравненным к удаленному hostname.
# /etc/ppp/pap-secrets # # user server secret addrs vlager-pap c3po cresspahl vlager.vbrew.com c3po vlager DonaldGNUth c3po.lucas.com |
Первая строка используется для того, чтобы опознать нас, когда мы соединяемся с c3po. Вторая описывает, как пользователь c3po должен опознавать себя при соединении с нами.
Имя vlager-pap в столбце имени
пользователя мы посылаем на c3po. По
умолчанию pppd выберет локальный hostname как имя
пользователя, но Вы можете также определить различные имена, давая опцию
user
, сопровождаемую эти именем.
pap-secrets
для
авторизации pppd должен знать имя удаленного хоста.
Поскольку он не имеет способа нахождения такой информации, Вы должны точно
определить его в командной строке, используя ключевое слово
remotename
, сопровождаемое соответствующим hostname.
Например, используя вышеупомянутую запись для установления подлинности
c3po, мы добавляем следующую опцию к
командной строке pppd:
#
|
В четвертом поле (и всех следующих) Вы можете определить, какие адреса IP разрешены точно, как в файле шифров CHAP. Удаленная машина затем может запроситьь только адреса из этого списка. В типовом файле мы требуем, чтобы c3po использовал реальный адрес IP.
Заметьте, что PAP довольно слабый опознавательный метод, и лучше
использовать CHAP, если это возможно. Я не буду здесь описывать PAP в
деталях: если Вы заинтересованы в использовании PAP, то найдете больше
сведений на pppd(8)
man-странице.
Назад | Глобальное оглавление | Вперед |
Основы безопасности | Локальное оглавление | Отладка Ваших настроек PPP |