Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


squid:squid-auth-helper-basic_pam_auth-for-active-directory-domain-users-authentication-via-pam-service-with-sssd

Xелпер basic_pam_auth для аутентификации пользователей Active Directory через связку PAM с SSSD

У прокси-сервера Squid имеется целый ряд программ «хелперов», обеспечивающих разные механизмы аутентификации. В большинстве случаев используются хелперы, обеспечивающие безопасные способы аутентификации, например ntlm_auth или negotiate_kerberos_auth, так как эти хелперы позволяют защитить передаваемые по сети учётные данные аутентифицируемых на прокси пользователей. Однако в любой ИТ инфраструктуре найдутся какие-то приложения, которые вынуждают администраторов дополнительно включать на Squid поддержку Basic-аутентификации. Мало того, что Basic-аутентификация сама по себе является небезопасным способом аутентификации, так как учётные данные аутентифицируемого на прокси пользователя передаются по сети в открытом виде, так ещё и большинство хелперов Basic-аутентификации, имеющихся в Squid, для подключения к удалённым системам хранения учётных данных используют незащищённые протоколы.

Например, ранее рассматриваемый нами хелпер basic_ldap_auth, позволяет подключаться к контроллерам домена Active Directory для аутентификации пользователей на прокси и делает он это посредствам открытого незащищённого соединения по протоколу LDAP. То есть учётные данные служебного доменного пользователя, которые используются хелпером для подключения к LDAP-каталогу передаются по сети в открытом виде.

Вместо хелпера basic_ldap_auth, для Basic-аутентификации в домене Active Directory мы можем использовать хелпер basic_pam_auth, который в связке с настроенной службой sssd на прокси-сервере Squid позволит нам исключить такой этап, как передача в открытом виде по сети учётных данных для подключения к каталогу Active Directory.

Для использования хелпера basic_pam_auth в рассматриваемой далее конфигурации предполагает, что на сервере Squid уже установлена и настроена служба sssd, а также произведено подключение сервера к домену Active Directory. Настройка в нашем примере выполняется на Debian 8 (Jessie). Пример такой настройки описан в статье Подключение Debian GNU/Linux 8.6 к домену Active Directory с помощью SSSD и realmd.

Итак, создадим на сервере Squid отдельную политику PAM, с которой будет работать хелпер basic_pam_auth. Эта политика будет вызывать библиотеку pam_sss.so для аутентификации пользователей:

# cat > /etc/pam.d/squid-sss <<EOF
auth    required   pam_sss.so
account required   pam_sss.so
EOF
# chown root:root /etc/pam.d/squid-sss
# chmod 644 /etc/pam.d/squid-sss

Теперь посмотрим то, какие параметры может принимать хелпер basic_pam_auth:

# /usr/lib/squid/basic_pam_auth -?

Параметров не так много:

Usage: /usr/lib/squid/basic_pam_auth [options..] -n service_name The PAM service name (default "squid") -t ttl PAM connection ttl in seconds (default 0) during this time the same connection will be reused to authenticate all users -o Do not perform account mgmt (account expiration etc) -1 Only one user authentication per PAM connection -r Detect and remove Negotiate/NTLM realm from username

Тестируем работу хелпера, вызвав его с параметром отсечения доменной части (-r) и указав ему имя созданной PAM-политики (-n)

# /usr/lib/squid/basic_pam_auth -r -n "squid-sss" -o

После выполнения команды отправляем работающему хелперу связку имя пользователя и пароль (через пробел). При этом проверяем реакцию хелпера на разные форматы предоставления имени пользователя.

chapaev-vi Pa$sw0rd OK KOM\chapaev-vi Pa$sw0rd OK chapaev-vi@KOM Pa$sw0rd OK chapaev-vi@holding.com Pa$sw0rd OK chapaev-vi Wr0ngPa$sw0rd ERR

Как видим, хелпер вполне справляется со своей задачей - проверкой предоставленных учётных данных пользователя в домене Active Directory.

Добавляем конфигурацию вызова хелпера в squid.conf:

squid.conf
...
### Basic authentication via PAM
#
auth_param basic program /usr/lib/squid/basic_pam_auth -n squid-sss -r -o
auth_param basic children 20
auth_param basic realm "Non-secure Basic authentication for Proxy Server"
auth_param basic credentialsttl 2 hours
...

Проверяем результат в клиентском браузере.

Несмотря на то, что при тесте имя пользователя в формате «KOM\chapaev-vi» отрабатывает успешно, на практике из клиентского браузера до хелпера это имя доходит в формате «KOM\\chapaev-vi» и хелпер не может его правильно обработать. Поэтому простым решением данной проблемы будет либо использование клиентами короткого имени «chapaev-vi», либо полного с доменной частью «chapaev-vi@holding.com» (может потребоваться в многодоменной инфраструктуре).


Автор первичной редакции:
Алексей Максимов
Время публикации: 19.03.2017 11:16

Обсуждение

РоманРоман, 24.06.2019 20:21
По вашей статье успешно ввел несколько серверов в домен AD. Настал черёд сквида.
На этапе проверки хелпера после отправления работающему хелперу связки имя пользователя и пароль (через пробел) при любой комбинации получаю ERR. При этом пользователь существует и видится сервером без проблем. Не подскажете что с ним не так?
Алексей МаксимовАлексей Максимов, 24.06.2019 20:28
У хелперов есть режим дебага. Используйте в первую очередь его, чтобы понять в чём проблема. Посмотрите наш Форум: https://forum.it-kb.ru/viewforum.php?f=52 Там несколько раз разбирались ситуации с проблемами аутентификации/авторизации в Squid в связке с Active Directory
OlegOleg, 06.11.2019 09:53
Та же проблема что и выше
OlegOleg, 06.11.2019 13:17
Автор не указал важный моментик
по умолчанию отбивал ошибку пока не добавил конкретных пользователей в sssd.conf
realm permit "Пользователи домена"

проверяем
nano /etc/sssd/sssd.conf
access_provider = simple
simple_allow_groups = Пользователи домена
после этого он определяет пользователей корректно
и заремил
;use_fully_qualified_names = True

теперь второй вопрос, как сквиду скормить в acl группы пользователей через sssd
Алексей МаксимовАлексей Максимов, 05.06.2020 11:06, 05.06.2020 11:09
Вероятней всего проблема связана с тем, что раньше basic_pam_auth по умолчанию не пытался проверять не только аутентификацию, но и авторизацию пользователя. На момент написания статьи действительно работал набор ключей вида:
./basic_pam_auth -n squid-sss -r

Однако при последующих развёртываниях я столкнулся с обозначенной Вами проблемой и её очевидным решением стало отключение попыток авторизации пользователя с помощью дополнительной опции "-o"
То есть теперь вызов проверочной команды может использоваться в виде:
./basic_pam_auth -n squid-sss -r -o

Соответственно, такой подход не требует выдавать всем пользователям домена право на вход на Linux-сервер (согласитесь, это явный перебор).
Добавил опцию "-o" в статью.
AliAli, 18.11.2021 15:45
Здраствуй,
Хотел бы знать как решил этот вопрос:"теперь второй вопрос, как сквиду скормить в acl группы пользователей через sssd"?
Ваш комментарий:
 
squid/squid-auth-helper-basic_pam_auth-for-active-directory-domain-users-authentication-via-pam-service-with-sssd.txt · Последнее изменение: 05.06.2020 11:10 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki