Модна аутентифікація - pap і chap

Модна аутентифікація - PAP і CHAP

До сих пір наш скрипт сам виконував аутентифікацію, тобто, вводив ім'я і пароль у відповідь на запити віддаленої сторони. Але PPP передбачає і свої способи аутентифікації # 151; PAP (Password Authentication Protocol) і CHAP (Challenge Handshake Authentication Protocol) і ми можемо ними скористатися, якщо віддалена сторона достатня кмітлива, щоб не тільки видати "login:", а й провести PAP або CHAP аутентифікацію. Потрібно зауважити, що комбінація FreeBSD + getty до недавнього часу не була таким кмітливим приладом, але, починаючи з FreeBSD 2.2.7, getty розпізнає початкові LCP-кадри PPP-з'єднання і може викликати, скажімо, pppd, який і вирішує, що робити далі. До цього getty вмів тільки видати цей самий "login:" і доводилося використовувати mgetty.

Так як наш скрипт дозвонки більше не буде займатися аутентификацией, потрібно прибрати з нього ім'я користувача "igor", його пароль "1234567" і помилку аутентифікації "Login incorrect":

Тепер скрипт закінчує роботу відразу ж, як отримає рядок "login:". Відзначимо, що запрошення "login:" не має ніякого відношення до PAP і CHAP, і pppd сприймає його не більше, як шум в лінії, тому замість цього рядка може бути будь-яке інше запрошення провайдера, в крайньому випадку, ">".

PAP аутентифікація відбувається наступним чином # 151; при встановленні PPP-з'єднання віддалена сторона пропонує нам аутентифікацію PAP. Ми погоджуємося і потім передаємо наше ім'я і пароль відкритому текстом. Якщо віддалену сторону ім'я і пароль влаштовує, то аутентифікація вважається успішною. Імена і паролі для PAP зберігаються в файлі / etc / ppp / pap-secrets. У нього повинні бути такі права доступу "rw- --- ---". Для нашого випадку ми запишемо в цей файл:

Формат цього рядка такий # 151; наше ім'я, ім'я віддаленої сторони і пароль. У PAP використовується тільки наше ім'я і пароль, а ім'я віддаленої сторони "cool" може бути довільним. В принципі, воно потрібно лише для того, щоб pppd міг визначити, який пароль потрібно використовувати в разі, коли Ви використовуєте одне і те ж ім'я у різних провайдерів, наприклад:

Тепер ми можемо дзвонити провайдеру:

Параметри user igor і remotename cool дозволяють однозначно визначити, який пароль використовувати при аутентифікації, в даному випадку це 1234567. Як вже говорилося, параметр remotename необхідний тільки, якщо ми не можемо однозначно вибрати пароль з файлу / etc / ppp / pap-secrets. Ім'я нашого боку можна також задати за допомогою параметра name igor. але параметр user має більший пріоритет. Зауважимо, що хоча пароль передається у відкритому вигляді, віддалена сторона може зберігати пароль у вигляді результату будь-якої хеш-функції, наприклад, MD5, як параметр якої виступає пароль.

CHAP аутентифікація відбувається наступним чином # 151; при встановленні PPP-з'єднання віддалена сторона пропонує нам аутентифікацію CHAP. Ми погоджуємося, і віддалена сторона висилає нам ключ (challenge), що складається з випадковою послідовності символів, і своє ім'я. Ми беремо наш пароль і присланий ключ і проганяє їх через алгоритм MD5. Одержаний результат висилаємо разом зі своїм ім'ям. Віддалена сторона, знаючи наш пароль і висланий її ключ, в свою чергу, робить те ж саме у себе, і якщо її результат збігається з надісланим нами, то аутентифікація вважається успішною. Таким чином, пароль не передається у відкритому вигляді, але віддалена сторона повинна зберігати наш пароль у відкритому вигляді.

Імена і паролі для CHAP зберігаються в файлі / etc / ppp / chap-secrets. права доступу у нього повинні бути такі ж, як для PAP: "rw- --- ---", і формат рядків теж збігається:

Тепер наша рядок для дзвінка провайдеру виглядає так:

Зверніть увагу, що вона відрізняється від PAP тільки відсутністю параметра remotename. Це пояснюється тим, що віддалена сторона сама говорить своє ім'я, тому її ім'я, записане в файлі / etc / ppp / chap-secrets. не може бути довільним, як це було у випадку з PAP. Навіть якщо Ви задасте параметр remotename. ім'я, повідомлене віддаленої стороною, має більший пріоритет. Що стосується імені нашого боку, то воно може бути також задано за допомогою параметра name igor.

Чи може pppd аутентифицировать себе в одних випадках через PAP, а в інших # 151; через CHAP. відповідь # 151; да. При запуску pppd перевіряє, як він може аутентифицировать себе, виходячи з локального імені та імені віддаленої сторони, тобто, чи є в файлах / etc / ppp / pap-secrets або / etc / ppp / chap-secrets рядки з такими іменами. І якщо, скажімо, віддалена сторона пропонує CHAP, а pppd не знаходить пароль у файлі / etc / ppp / chap-secrets. то він запросить PAP і якщо це влаштовує віддалену сторону, то аутентифікація пройде по PAP.

Крім того, можна вказати pppd, щоб він не погоджувався проводити аутентифікацію тим чи іншим способом або ж вимагав якогось одного способу з допомогою різних комбінацій параметрів refuse-pap. refuse-chap. require-pap і require-chap. Раніше ці параметри називалися відповідно -pap. -chap. + Pap і + chap.