Библиотека сайта rus-linux.net
23. Аутентификация
23.1 Как в Squid работает прокси-аутентификация ?
Замечание: Представленая здесь информация верна для версии 2.4.
Пользователи будут аутентифицироваться, если squid настроен на использование ACL типа proxy_auth (см. след. вопрос).
Броузер посылает пользовательский запрос на аутентификацию в загловке Authorization.
Если Squid получает запрос и если список правил http_access содержит ACL типа proxy_auth, Squid ищет загловок Authorization. Если заголовок присутствует, Squid декодирует его и извлекает имя пользователя и пароль.
Если заголовок отсутствует, Squid возвращает HTTP-ответ со статусом 407 (Proxy Authentication Required). Пользовательский агент (броузер) получает ответ 407 и просит пользователя ввести имя и пароль. Имя и пароль кодируется и посылается в заголовке Authorization для последующих запросов к прокси.
ЗАМЕЧАНИЕ: Имя и пароль кодируются с использованием ``base64'' (см. раздел 11.1 RFC 2616). Однако base64 это только кодирование binary-to-text, при кодировании информация НЕ шифруется. Это означает, что имя пользователя и пароль фактически передаются ``открытым текстом'' между броузером и прокси. Поэтому вы не должны использовать тот же пароль и имя пользователя, который вы используете для вашего аккаунта.
Аутентификация фактически происходит вне основного процесса Squid. Когда Squid стартует, он запускаеть несколько процессов аутентификации. Эти процессы читают имена пользователей и пароли со стандартного ввода и выдают "OK" или "ERR" на стандартный вывод. Подобная техника позволяет вам использовать большое количество различных схем аутентификации, однако вы можете использовать только одну схему в данный момент времени.
Исходный код 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, какую программу аутентификации использовать при помощи опции authenticate_program в squid.conf. Вы указываете имя программы плюс опции командной строки если необходимо.К примеру:
authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd
23.2 Как мне использовать аутентификацию для контроля доступа?
Убедитесь что ваша программа аутентификации установлена и работает правильно. Вы можете протестировать ее вручную.
Добавьте несколько proxy_auth ACL в ваш конфигурационный файл. К примеру:
acl foo proxy_auth REQUIRED acl all src 0/0 http_access allow foo http_access deny allТермин REQURIED означает, что любой аутенентифицированый пользователь попадет в ACL по имени foo.
Squid предоставляет вам хорошо структурированый контроль, определяемый индивидуальными именами пользователей. К примеру:
acl foo proxy_auth REQUIRED acl bar proxy_auth lisa sarah frank joe acl daytime time 08:00-17:00 acl all src 0/0 http_access allow bar http_access allow foo daytime http_access deny allВ этом примере пользователям lisa, sarah, joe, и frank разрешено использовать прокси в любое время. Другим пользователям разрешен доступ только в дневное время.
23.3 Кеширует ли Squid запросы аутентификации?
Да. Успешные запросы аутентификации кешируются на один час по умолчанию. Это значит (в худшем случае), что есть возможность для кого-нибудь использовать ваш кеш в течении часа после того, как он был удален из базы аутентификации.
Вы можете контролировать время истечения срока действия пароля при помощи опции authenticate_ttl.
23.4 А пароли передаются открытым текстом или шифруются?
Squid размещает пароли открытым текстом в памяти кеша.
Squid передает открытым текстом имя пользователя и пароль, когда общается с внешним процессом аутентификации. Заметьте однако, что эти межпроцессовые взаимодействия происходят по TCP-соединениям, привязанным к loopback-интерфейсу. Посему не представляется возможным процессам с других компьюретов "выследить" трафик аутентификации.
Каждая программа аутентификации должна выбирать собственную схему для постоянного хранения паролей и имен пользователей.
23.5 Могу ли я использовать Winbind аутентификацию ?
Winbind - новое дополнение к Samba, предоставляющее некоторые потрясающие возможности для бюджетов пользователей на основе NT. Для Squid winbind представляет собой правильное и эффективное решение и для basic и для NTLM challenge/response аутентификации в противопоставление контролеру домена NT.
Требуется Samba версии 2.2.4 или выше. Samba 2.2.4, 2.2.5 и 3.0a17 умеют работать с аутентификатором winbind в Squid 2.5.
Аутентификация через winbind успешно работает под Linux, FreeBSD и Solaris.
Настройка Samba
Сборка/Установка Samba
Samba долбжна быть собрана с такими опциями в configure:
--with-winbind --with-winbind-auth-challenge (needed for ntlm)
Опционально, для сборки Samba 2.2.5 можно наложить патч smbpasswd.diff См. ниже SMBD and Machine Trust Accounts, чтобы определить нужен ли вам этот патч.
Тестирование Samba winbindd
- Отредактируйте ваш smb.conf, чтобы winbindd заработал. Как шаблон
для секции [global] файла smbd.conf можно использовать нижеследующее.
workgroup = mydomain password server = myPDC security = domain winbind uid = 10000-20000 winbind gid = 10000-20000 winbind use default domain = yes
- Войдите в домен NT как указано в руководстве (man) по winbindd для вашей версии Samba.
- Тестирование фунциональности winbindd.
- Запустите nmbd (требуется, чтобы убедится, что все верно работает).
- Запустите winbindd.
- Проверьте общую функциональность winbindd при помощи "wbinfo -t":
# wbinfo -t Secret is good
- Проверьте аутентификацию пользователя через winbindd:
# wbinfo -a mydomain\\myuser%mypasswd plaintext password authentication succeeded error code was NT_STATUS_OK (0x0) challenge/response password authentication succeeded error code was NT_STATUS_OK (0x0)
Samba 2.2.x
Демон smbd, не больно нужный для winbindd, может понадобиться для управления доверительным аккаунтом машины.
Нормальные члены домена регулярно меняют пароль аккаунта. Windows и Samba сервера по умолчанию меняют этот пароль каждые семь дней.
Компонентом Samba отвечающим за управление паролем доверительного аккаунта является smbd. Smbd необходим, чтобы получать запросы, вызывающие смену пароля. Если машина будет использоваться как файл- или принт-сервер, то запущенный для обслуживания обычных запросов smbd должен все нормально поддерживать.
Однако в случае, когда хелпер winbind Сквида единственный из запущенных компонент Samba, smbd может простаивать. Действительно, может не быть других причин запускать smbd вообще.
Есть две простые возможности изменить доверительный аккаунт. Обе могут реализовываться посредством ежедневной смены доверительного пароля при помощи cron.
UglySolution.pl - это простой скрипт на perl, чтобы загрузить smbd, подсоедениться к расшаренному ресурсу Samba с использованием smbclient и сгенирировать достаточно фальшивой активности, чтобы вызвать смену доверительного пароля машины smbd.
smbpasswd.diff - это патч для утилиты smbpasswd от Samba 2.2.5, позволяющий изменять пароль аккаунта машины. Этот минимальный патч, просто реализующий в интерфейсе командной строки уже существующую функцию Samba.
После накладки патча, синтаксис смены пароля smbpasswd выглядит так:
smbpasswd -t DOMAIN -r PDC
Samba 3.x
В Samba версии 3.x все намного проще. Smbd больше не нужен, чтобы управлять машиной с доверительным аккаунтом, никаких утилит больше патчить тоже не нужно.
Команда Samba team реализовала возможность смены пароля машины с доверительным аккаунтом при помощи новой команды "net". Все что нужно - ежедневное выполнение "net rpc changetrustpw" при помощи cron.
Настройка Squid
Сборка/Установка Squid
Squid должен быть собран с такими опциями в configure:
--enable-auth="ntlm,basic" --enable-basic-auth-helpers="winbind" --enable-ntlm-auth-helpers="winbind"
Тестирование Squid без аутентификации
Прежде чем продолжать, проверьте общую функциональность Squid. Убедитесь, что squid работает без авторизации.
Тестирование хелпера
Тестирование winbind ntlm helper невозможно из командной строки, но winbind basic-аутентификатор может быть протестирован как и любой другой basic helper:
# /usr/local/squid/libexec/wb_auth -d /wb_auth[65180](wb_basic_auth.c:136): basic winbindd auth helper ... mydomain\myuser mypasswd /wb_auth[65180](wb_basic_auth.c:107): Got 'mydomain\myuser mypasswd' from squid (length: 24). /wb_auth[65180](wb_basic_auth.c:54): winbindd result: 0 /wb_auth[65180](wb_basic_auth.c:57): sending 'OK' to squid OKХелпер должен вернуть "OK", если получил верные имя_пользователя/пароль.
Редактирование squid.conf
- Установите аутентификаторы.
Добавьте нижеследующее, чтобы включить и winbind basic и ntlm аутентификаторы. IE будет использовать ntlm и остальные basic:
auth_param ntlm program /usr/local/squid/libexec/wb_ntlmauth auth_param ntlm children 5 auth_param ntlm max_challenge_reuses 0 auth_param ntlm max_challenge_lifetime 2 minutes auth_param basic program /usr/local/squid/libexec/wb_auth auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours
- Добавьте acl для аутентификации:
acl AuthorizedUsers proxy_auth REQUIRED .. http_access allow all AuthorizedUsers
Тестирование Squid с аутентификацией
- Internet Explorer:
Проверьте работу через squid с использованием IE. Если вы вошли в домен, запрос пароля не должен появится.
Убедитесь, что запросы действительно авторизуются, заглянув в access.log. Имя пользователя/домен должны в нем присутствовать.
- Netscape, mozilla, opera...:
Проверьте работу с другими броузерами. Стандартный диалог запроса пароля должен появиться.
Вход в домен не требуется, если пользователь в домене по умолчанию и установлено "winbind use default domain = yes" в smb.conf. В противном случае имя пользователя должно быть введено в формате "domain\username".
Если в access.log нет имени пользователя и/или не происходи запрос пароля в броузере, то установки acl/http_access в squid.conf неверны.
Ссылки
Joining a Domain in Samba 2.2.x