Необходимо настроить NTLM авторизацию на ОС CentOS. Данная авторизация позволяет организовать доступ в интернет без ввода логина и пароля.
Исходные данные:
1. ОС — CentOS 5.7 x32
# cat /etc/redhat-release
CentOS release 5.7 (Final)
2. Домен на Samba
Установлены следующие пакеты Samba:
# yum list installed | grep samba
samba.i386 3.0.33-3.29.el5_7.4 installed
samba-client.i386 3.0.33-3.29.el5_7.4 installed
samba-common.i386 3.0.33-3.29.el5_7.4 installed
Параметры домена:
# more /etc/samba/smb.conf | grep netb
netbios name = SLHSRV
.........
# more /etc/samba/smb.conf | grep work
workgroup = KONTORASLH
comment = Network Logon Service
……….
IP адрес сервера — 10.0.15.2
3. Версия Squid
# squid -v
Squid Cache: Version 2.6.STABLE21
......
установленный пакет:
# yum list installed | grep squid
7:2.6.STABLE21-6.el5 installed
squid.i386
Имеем настроенную авторизацию следующим способом:
auth_param basic program /usr/lib/squid/smb_auth –
W\ KONTORASLH -U 10.0.15.2
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive on
external_acl_typeunix_group %\ LOGIN /usr/lib/squid/squid_unix_group -p
acl samba_users proxy_auth REQUIRED
4. На сервере настроен DNS
Подробно описывать настройки сервера не буду. Остановлюсь на настройках прокси сервера в части, касающейся NTLM авторизации. Рассмотрим два способа:
Первый: наиболее оптимальный. Без Winbind и ввода сервера в домен.
Второй: Использую Winbind, и вводя сервер в домен.
Приступаем к первому способу.
Добавляем в squid.conf следующие строки:
auth_param ntlm program /usr/lib/squid/ntlm_auth KONTORASLH/10.0.15.2
auth_param ntlm children 20
auth_param ntlm keep_alive on
#######################################
выше настроек : auth_param basic program
........................................
#######################################
external_acl_type unix_group %LOGIN /usr/lib/squid/squid_unix_group -p -s
строки необходимо добавить перед строками базовой авторизации (auth_param basic), auth_param basic убирать не следует, так как не все программы поддерживают такую авторизацию (например skype).
auth_param — Этот тэг используется для определения параметров для различных схем аутентификации
поддерживаемых Squid.
format: auth_param scheme parameter [setting]
auth_param ntlm program — указывает на использование хелпера авторизации, расположенного в каталоге /usr/lib/squid/, и протокол авторизации.
auth_param ntlm children 20 — указано максимально количество одновременно запускаемых хелперов
"keep_alive" on|off —
Эта опция включает использование постоянного соединения при инициализации запроса аутентификации. Есть сведения, что некоторые версии MS IE имеют проблемы с этим, но лучше будет если эта опция включена.
external_acl_type —
Этот тэг позволяет определить внешние ACL. Внешние ACL это такие ACL, которые не входят в набор стандартных типов ACL. Например, это могут быть самописные (или откуда- нибудь взятые) скрипты (вспомогательные программы), которые используя переменные Squid осуществляют некоторое действие. Такие скрипты запускаются вместе со Squid отдельным процессом.
external_acl_type name [options] FORMAT.. /path/to/helper [helper arguments..]
Хелпер входит в пакет squid.
# /usr/lib/squid/squid_unix_group --help
/usr/lib/squid/squid_unix_group: invalid option -- -
Unknown option '--'.
Usage: /usr/lib/squid/squid_unix_group -g group1 [-g group2 ...] [-p] [-s]-g group
The group name or id that the user must belong in order to
be allowed to authenticate.
-p Verify primary user group as well
-s Strip NT domain from usernames
Второй способ.
добавляем следующие строчки также перед базовой авторизацией:
......
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 20
auth_param ntlm keep_alive on
......
Нужно ввести сервер в домен командой:
net join -U samba
После запуска squid-a:
В логах пишет:
Jan 24 11:42:35 slhsrv (ntlm_auth): [2012/01/24 11:42:35, 0] utils/ntlm_auth.c:get_winbind_netbios_name(172)
Jan 24 11:42:35 slhsrv (ntlm_auth): could not obtain winbind netbios name!
Jan 24 11:42:47 slhsrv (ntlm_auth): [2012/01/24 11:42:47, 0] utils/ntlm_auth.c:get_winbind_domain(146)
Jan 24 11:42:47 slhsrv (ntlm_auth): could not obtain winbind domain name!
Jan 24 11:42:47 slhsrv (ntlm_auth): [2012/01/24 11:42:47, 0] utils/ntlm_auth.c:get_winbind_netbios_name(172)
Jan 24 11:42:47 slhsrv (ntlm_auth): could not obtain winbind netbios name!
Jan 24 11:42:57 slhsrv (ntlm_auth): [2012/01/24 11:42:57, 0] utils/ntlm_auth.c:get_winbind_domain(146)
Jan 24 11:42:57 slhsrv (ntlm_auth): could not obtain winbind domain name!
Jan 24 11:42:57 slhsrv (ntlm_auth): [2012/01/24 11:42:57, 0] utils/ntlm_auth.c:get_winbind_netbios_name(172)
Jan 24 11:42:57 slhsrv (ntlm_auth): could not obtain winbind netbios name!
Запускаем Winbind:
# /etc/init.d/winbind start
Как уже упоминалось, для второго способа нужен Winbind. отличий в Работе не заметил, так первый способ более предпочтителен для домена на SAmba.
Немного теории:
Исходный код Squid идет с несколькими типами процессов аутентификации. Включая:
- LDAP: использует Lightweight Directory Access Protocol
- NCSA: использует NCSA-стиль для файла имен пользователей и паролей.
- MSNT: использует Windows NT authentication domain.
- PAM: использует Linux Pluggable Authentication Modules scheme.
- SMB: использует SMB-север типа Windows NT или Samba.
- getpwam: использует старомодный файл паролей old-fashioned Unix.
Пользователи будут аутентифицироваться, если squid настроен на использование ACL типа proxy_auth.
Броузер посылает пользовательский запрос на аутентификацию в заголовке Authorization.
Если Squid получает запрос и если список правил http_access содержит ACL типа proxy_auth, Squid ищет загловок Authorization. Если заголовок присутствует, Squid декодирует его и извлекает имя пользователя и пароль.
Если заголовок отсутствует, Squid возвращает HTTP-ответ со статусом 407 (Proxy Authentication Required). Пользовательский агент (броузер) получает ответ 407 и просит пользователя ввести имя и пароль. Имя и пароль кодируется и посылается в заголовке Authorization для последующих запросов к прокси.
Имя пользователя и пароль фактически передаются «открытым текстом» между броузером и прокси. Поэтому вы не должны использовать тот же пароль и имя пользователя, который вы используете для вашего аккаунта.
Аутентификация фактически происходит вне основного процесса Squid. Когда Squid стартует, он запускаеть несколько процессов аутентификации. Эти процессы читают имена пользователей и пароли со стандартного ввода и выдают "OK" или "ERR" на стандартный вывод. Подобная техника позволяет вам использовать большое количество различных схем аутентификации, однако вы можете использовать только одну схему в данный момент времени.
Аутентификация NTLM
NTLM представляет собой расширенную версию старого протокола аутентификации LM (LAN Manager). NTLM работает посредством вопросов/ответов между сервером и клиентом без передачи пароля пользователя через сеть в открытом виде. Клиент должен подтвердить то, что он знает пароль пользователя, посредством отправки зашифрованного хэша.
NTLM функционирует следующим образом:
- Пользователь указывает имя пользователя, пароль и имя домена при входе на компьютер-клиент.
- Клиент создает хэш данного пароля и удаляет оригинал.
- Клиент отправляет серверу имя пользователя в открытом виде.
- Сервер отправляет клиенту 16-битный фрагмент случайных данных.
- Клиент шифрует этот фрагмент, а также хэш пароля пользователя и передает их на сервер.
- Сервер передает имя пользователя, случайный фрагмент данных и ответ клиента на контроллер домена.
- Контроллер домена шифрует отрезок случайных данных вместе со своим собственным хэшем пароля пользователя, после чего сравнивает их с элементами, присланными сервером.
- Если значения совпадают, контроллер домена уведомляет сервер об успешном завершении аутентификации.
- Если значения или имя пользователя не совпадают, контроллер домена уведомляет об этом сервер, который передает клиенту соответствующее сообщение. После этого браузер клиента запрашивает у пользователя аутентификационные данные.
Возможно отключать и включать данную авторизацию в самом браузере:
Первоисточник: http://skeletor.org.ua/?p=422
Приведу некоторые выдержки:
Opera: официально не поддерживает NTLM-авторизацию, хотя в настройках можно найти пункт, который позволяет включать или отключать эту опцию. Поэтому, в настройках вашего прокси-сервера нужно добавить basic авторизацию. Что бы отключить NTLM-авторизацию (и собственно заставить работать через прокси этот браузер) делаем следующее:
1) набираем в браузере about:config
2) переходим в раздел NetWork и снимаем галочку с параметра Enable NTLM
3) перезапускаем браузер.
Правда есть один ньюанс (так сказать неудобство): при первом запуске придётся ввести логин пароль (полностью, то есть с доменом) и поставить галочку «Сохранить». Теперь при каждом последующем открытии браузера табличка авторизации появляться будет, и нужно будет просто жать «Ок». Неудобно, но что поделаешь.
Примечание: иногда на некоторых ОС наоборот приходилось включать NTLM-авторизацию. Возможно это так же зависило от версий браузера и ОС.
FireFox, Chrome: они поддерживают, хотя нужно немного по шаманить. Опишу несколько вариантов, которые раздобыл в интернете, возможно вам придётся перепробовать все, пока не найдёте тот, который подошёл вам.
1) нужно будет добавить в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa параметр под названием LmCompatibilityLevel типа DWORD и присвоить ему значение 1. После чего надо будет перегрузить компьютер (именно этот вариант мне подошёл)
2) Чтобы Firefox мог проходить ntlm авторизацию, вроде достаточно открыть в адресной строке about:config и изменить параметры на такие:
network.negotiate-auth.delegation-uris = http://,https://
network.negotiate-auth.trusted-uris = http://,https://
После чего перезапустить браузер.
3) Открываем редактор политик (gpedit.msc) Конфигурация компьютера -> Конфигурация windows -> Параметры безопасности -> Локальные Политики -> Параметры Безопасности -> Сетевая безопасность: уровень проверки подлинности LAN Manager и ставим параметр Отправлять LM и NTLM – использовать сеансовую безопасность NTLMv2 при согласовании.
После чего закрываем политику и перегружаемся.
Если у вас английская версия, тогда так: machine policy-> computer config->windows setting->local policies->security option->Network security: LAN Manager authentication level и выбрать LM & NTLM – Use NTLMv2 session if negotited.
От себя: у меня все заработало. шаманить с самими браузерами не пришлось. Но информация по включению и отключению NTLM в браузере полезна.
Полезные статьи:
http://www.securitylab.ru/analytics/362448.php
http://www.chla.ru/index.php/security
http://wiki.squid-cache.org/ConfigExamples#Authentication