Константин Ошмян » 20 янв 2004, 13:35
Поскольку я организовывал работу Squid через NTLM, то позвольте встрять.
1. Нужно различать понятия "аутентификация" и "авторизация". Первое - выяснение того, что за пользователь к нам обращается (и подтверждение подлинности этой информации). Второе - принятие решения о том, что данному пользователю можно, а что - нет.
2. Протокол NTLM выполняет именно аутентификацию. При этом по сети передаётся имя пользователя, но не пароль - от пароля берётся лишь хэш, при вычислении которого используется ещё и некоторое переданное сервером случайное число (challenge), поэтому хэш получается каждый раз разным. Сквидовский хэлпер устроен так, что является как бы посредником - сам обращается к домен-контроллеру от имени клиента, запрашивает от него challenge, передаёт клиенту, а ответ клиента снова посылает домен-контроллеру и ждёт, что он ему ответит - OK либо FAIL. К самому паролю непосредственного доступа никто, кроме домен-контроллера, доступа не имеет (и это правильно).
3. NTLM-аутентификация действительно выполняется прозрачно для пользователя, но для этого нужно учесть некоторые моменты:
- браузер должен поддерживать этот механизм (MSIE и последняя Mozilla поддерживают, Netscape - скорее нет, чем да, с Opera-ой иногда возникали проблемы - пробовалось месяца два назад, надеюсь, что ситуация поменялась к лучшему) ;
- работает только на платформе Windows;
- пользователь должен быть "залогинен" в домен (например, если на Windows 98 в ответ на начальное приглашение нажать "Cancel", то никакой прозрачной аутентификации не будет - всплывёт окно "Введите имя/пароль/домен") ;
- передаваемое имя пользователя - это имя, полученное клиентом Microsoft Network, а не имя пользователя в NDS (в общем случае - могут не совпадать) ;
4. В любом случае - для проверки подлинности переданной через NTLM информации нужен доступ к домен-контроллеру (собственно, именно домен-контроллер-то этим и занимается, сквидовсий хэлпер - как говорилось выше - лишь посредник). Как решать задачу в отсутствие домена - я не знаю. Возможно, в случае NetWare 6 можно решить задачу, подняв на сервере NFAP, чтобы сам сервер прикидывался домен-контроллером - но это добавит отдельную задачу управления доменными паролями ("simple passwords" в Novell-овской терминологии).
5. Авторизация может выполняться, используя совершенно другой механизм - например, проверяя членство пользователя в каких-либо группах либо в контейнерах через LDAP, и этим в Squid-е занимается уже другой хэлпер.