The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Аутентификация пользователей в squid через доменные аккаунты Windows (freebsd squid auth win domain samba)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: freebsd, squid, auth, win, domain, samba,  (найти похожие документы)
From: Misha Volodko <misha.volodko@gmail.com.> Newsgroups: email Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC) Subject: Аутентификация пользователей в squid через доменные аккаунты Windows Задача. Необходимо аутентифицировать пользователей в squid на основе доменных аккаунтов. Не всегда подходит классическая схема учета трафика по IP адресам примеры случаев когда подобная ситуация не устраивает достаточно полно описаны в [1]. Кроме того, стояла задача защищать подключение к Internet в большой сети от приносимых ноутбуков. Инструменты. 1. OC FreeBSD использовались версии 4.11-RELEASE и 5.3-RELEASE-p5 2. Windows 2003 - контроллер домена. 3. samba-3.0.11 4. squid-2.5.8 Сеть и топология. Домен - piva.net Контроллер домена - lab002.piva.net Рабочие станции соответственно - labxxx.piva.net Машина на которой установлен squid - lab003.piva.net Практическое руководство. 1. Настройка клиента Kerberos В FreeBSD существует две реализации Kerberos производства MIT и HEIMDAL, соединиться с сервером Kerberos используемым в Windows 2003 у меня получилось только в случае использования Kerberos клиента производства HEIMDAL. Более того, он работает, только если версия старше 0.6. В пятой ветке FreeBSD в базовой системе идет Kerberos производства HEIMDAL версии 0.6.1, поэтому для его использования необходимо добавить в файл /etc/make.conf следующие параметры: MAKE_KERBEROS5 = yes ENABLE_SUID_K5SU = yes После этого необходимо пересобрать мир (make buildworld && make installworld). Как это делается, я описывать не буду, обратитесь к руководствам по этой теме. В базовой системе четвертой версии FreeBSD идет клиент Kerberos производства HEIMDAL однако довольно старой версии 0.5.1. Для использования сервера Kerberos производства HEIMDAL версии 0.6.х в четвертой версии FreeBSD необходимо установить порт /usr/ports/security/heimdal. Важное замечание - DNS сервер, прописанный в /etc/resolv.conf ДОЛЖЕН ЗНАТЬ о зоне используемой для построения Windows домена (наиболее удобный путь настроить его как вторичный DNS сервер). Клиент Kerberos будет искать записи типа SRV _kerberos._udp. Настраиваем клиента Kerberos. В файл /etc/krb5.conf необходимо добавить информацию о сервере Kerberos в моем случае это: [libdefaults] default_realm = PIVA.NET [realms] PIVA.NET = { kdc = lab002.piva.net admin_server = lab002.piva.net } Все остальные опции можно оставлять по умолчанию. Попробуем соединиться с сервером Kerberos. [root@lab003 ~] kinit -p Administrator@piva.net Administrator@PIVA.NET's Password: и вводим пароль, система должна выдать kinit: NOTICE: ticket renewable lifetime is 1 week проверим соединение, в моем случае это выглядит так: [root@lab003 ~] klist Credentials cache: FILE:/tmp/krb5cc_0 Principal: administrator@PIVA.NET Issued Expires Principal Feb 22 17:10:40 Feb 23 03:10:38 krbtgt/PIVA.NET@PIVA.NET Отлично, соединение есть. 2. Samba Устанавливаем /usr/ports/net/samba3/ Необходимые опции [X] ADS With Active Directory support [X] WINBIND With WinBIND support Далее необходимо настроить smb.conf Отличное руководство по этому процессу [6]. Замечание: на четвертой версии FreeBSD при использовании Kerberos клиента версии 0.6.3 программа wbinfo не могла проверить наличие доверительного аккаунта в домене(wbinfo -t). Проблема решилась использованием security level domain вместо ads. Приведу опции, которые добавлял я: workgroup = piva server string = lab003 netbios name = lab003 realm = piva.net security = ads password server = lab002.piva.net encrypt passwords = yes winbind separator = + winbind use default domain = yes winbind uid = 10000-20000 winbind gid = 10000-20000 winbind enum users = yes winbind enum groups = yes template homedir = /home/winnt/%D/%U template shell = /usr/local/bin/bash Как и советует автор [1], добавим необходимы нам имена в файл /usr/local/etc/lmhosts 10.10.10.1 lab001.piva.net 10.10.10.2 lab002.piva.net 10.10.10.3 lab003.piva.net Входим в домен: net ads join -U Administrator%password Joined 'LAB003' to realm 'PIVA.NET' 3. winbindd Следующим шагом у нас запуск winbindd. Я запускал с ключиком -d10, в debug режиме. Проверить работоспособность winbind можно командой wbinfo Необходимо удостовериться, что winbind нормально работает и может получать списки пользователей и групп с сервера. [root@lab003 ~] wbinfo -t checking the trust secret via RPC calls succeeded Это означает что доверительный аккаунт компьютера создан. Посмотрим на список пользователей. [root@lab003 ~] wbinfo -u (для просмотра пользователей) administrator guest support_388945a0 lab002$ krbtgt iusr_lab002 iwam_lab002 lab001$ iwam_lab001 iusr_lab001 lab003$ pablo lab005$ Как видно, аккаунт для нашего компьютера уже создался (lab003$) и взаимодействие налажено. Попробуем аутентифицироваться в домене: [root@lab003 ~] wbinfo -a administrator%password plaintext password authentication succeeded challenge/response password authentication succeeded На этом настройку winbind можно считать законченной. 4. squid Устанавливаем /usr/ports/www/squid Насколько видно из Makefile helper для winbind включен по умолчанию. Т.е. ничего особенного конфигурировать не нужно. После установки при запущенном winbindd необходимо проверить работу helper'а Для этого запускаем /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic Вводим piva+administrator password Если получен ответ OK значит все отлично. Иначе необходимо смотреть логи winbindd Настраиваем собственно сам squid. Отличное руководство по это делу [3] В данном случае были добавлены следующие стороки: auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm children 10 auth_param ntlm max_challenge_reuses 0 auth_param ntlm max_challenge_lifetime 2 minutes auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic auth_param basic children 10 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours Данная конфигурация описывает два helper'a один дня IE (ntlmssp) другой для всех остальных пользователей (mozilla, opera, etc). Необходимо отметить что для нормальной работы из броузера у пользователя под который работает squid должно хватать прав для обращения к сокету на котором слушает winbindd. Согласно man ntlm_auth это winbindd_privileged в $LOCKDIR. В моем случае сокет находиться в /var/db/samba/winbindd_privileged. Для решения проблемы я изменил группу владельца этой директории на squid. После этого можно приступать к полноценному тестированию из веб броузера. 5. Как это выглядит В случае если пользователь не входит в домен ему выдается окно в котором предлагается ввести имя пользователя, пароль и домен. Клиенты вошедшие в домен и использующие IE аутентифицируются прозрачно. Клиенты вошедшие в домен и использующие иные броузеры аутентифицируются по протоколу basic. Каждый раз при запуске вводят имя и пароль. Самая главная проблема - невозможность аутентифицировать пользователей с русскими именами. 6. Дополнительный функционал Дополнительно можно использовать возможность управлять доступом в Internet из Windows. Для этого можно воспользоваться параметром --require-membership-of= ntlm_auth. Как видно из названия при аутентификации helper будет требовать наличие пользователя в определенной группе. В моем случае указание там названия группы проблемы не решило. Пришлось указывать универсальный идентификатор группы в домене (SID). Узнать его можно с помощью уже знакомой программы wbinfo. Например, если необходимо узнать SID группы inetusers: [root@lab004 ~] wbinfo -n inetusers S-1-5-21-1828638205-4279006917-513177360-1121 Domain Group (2) После этого необходимо изменить конфигурационный файл squid указав в местах описания хелперов необходиму директиву. auth_param ntlm program /usr/local/bin/ntlm_auth \ --require-membership-of=S-1-5-21-1828638205-4279006917-513177360-1121 \ --helper-protocol=squid-2.5-ntlmssp Теперь пользователи которые не входят в группу inetusers не смогут выйти в Internet. Источники. 1. http://www.opennet.dev/base/net/win_squid.txt.html 2. http://www.squid-cache.org 3. http://www.squid-cache.org/Doc/FAQ/FAQ-23.html 4. http://devel.squid-cache.org/ntlm/squid_helper_protocol.html 5. http://groups-beta.google.com 6. http://samba.org/samba/docs/man/Samba-HOWTO-Collection/domain-member.html 7. http://www.wlug.org.nz/ActiveDirectoryKerberos

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Admin (??), 04:01, 28/02/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ага, а теперь пробуем загрузить обновления с windowsupdate.microsoft.com с помощью windows xp sp2 + bits2 и получаем по лбу подарочным набором граблей. также засилие ошибок 407 в логах сквида очень разнообразит жизнь при использовании лог-парсеров сквида.
    для более глубокого понимания читать сюда :)
    http://devel.squid-cache.org/ntlm/
     
     
  • 2.5, pablo (??), 14:36, 28/02/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо за комментарии.
    Попробовал установить все обновления.
    Устанавливалось с локального sus сервера недельной давности.
    Честно говоря не заметил проблем. Что имелось в виду? Где воникают проблемы?
    Да, ошибок 407 довольно большое количество, однако при использовании парсеров их тоже можно парсить. Хотя это напрягает, согласен.

    >Ага, а теперь пробуем загрузить обновления с windowsupdate.microsoft.com с помощью windows xp
    >sp2 + bits2 и получаем по лбу подарочным набором граблей. также
    >засилие ошибок 407 в логах сквида очень разнообразит жизнь при использовании
    >лог-парсеров сквида.
    >для более глубокого понимания читать сюда :)
    >http://devel.squid-cache.org/ntlm/


     
     
  • 3.6, Admin (??), 14:43, 28/02/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Не путайте тёплое с мягким. SUS никоем образом не равен windowsupdate.microsoft.com. А новая, post-sp2 winxp служба передачи файлов - bits2, ведёт себя очень неадекватно при использовании именно такой схемы. В общем, она не посылает повторные запросы при получении отклика 407 и "замирает" навсегда, как результат - компьютер сидит без обновлений. Как я встречал в интернете, подобные проблемы возможны с некоторыми аплетами и т.д., т.е. с более тупыми клиентами кеша. Микрософт наличие "особенностей" признают, но, как это обычно бывает, им всё равно. Use MS ISA(TM).
     
     
  • 4.7, pablo (??), 10:29, 01/03/2005 [^] [^^] [^^^] [ответить]  
  • +/
    А в чем отличие SUS от windowsupdate?
    Сходил на microsoft.com в стоке поиска указал bits 2.0, скачал (файл WindowsXP-KB842773-v2-x86-rus.exe для русской WinXP). Перезагрузился... вроде все пучком... в логе сквида нормальные запросы... правда много 407 но после получения ее все нормально.
    Просьба указать на то как можно достичь описанного эффекта. Внедрение проекта на носу, хотелось бы на все грабли наступить...

    >Не путайте тёплое с мягким. SUS никоем образом не равен windowsupdate.microsoft.com. А
    >новая, post-sp2 winxp служба передачи файлов - bits2, ведёт себя очень
    >неадекватно при использовании именно такой схемы. В общем, она не посылает
    >повторные запросы при получении отклика 407 и "замирает" навсегда, как результат
    >- компьютер сидит без обновлений. Как я встречал в интернете, подобные
    >проблемы возможны с некоторыми аплетами и т.д., т.е. с более тупыми
    >клиентами кеша. Микрософт наличие "особенностей" признают, но, как это обычно бывает,
    >им всё равно. Use MS ISA(TM).


     
  • 4.8, root (??), 08:21, 02/03/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >им всё равно. Use MS ISA(TM).
    или use !IE


     
  • 2.23, Kapitan (??), 23:23, 28/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Может я конечно и не прав и сужу с высоты полета своей компании. Но я считаю, что если в компании есть два сервера одна из которых домен контроллер, а вторая шлюз в ИНЕТ, то явно есть и сервера приложений и/или СУБД. Куда действительно приспокойно ставится СУС, который отлично ходит через прокси. Плюс экономия траяика. Через GPO в домене настраивается политика обновления - и даже ходить никуда не нужно.
     

  • 1.2, ds_shadof (?), 09:28, 28/02/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    И что теперь?
     
  • 1.3, ds_shadof (?), 09:32, 28/02/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    mozilla без каких либо проблем может использовать схему ntlmssp
     
     
  • 2.4, pablo (??), 14:24, 28/02/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо за дополнение. Действительно mozilla и firefox прекрасно аутентифицируються и работают.
     

  • 1.9, Ivan512 (?), 08:27, 02/03/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Люди, обьясните в каких случая стоит ставить kerberos? Всегда работаю без неё.
     
  • 1.10, Sem (ok), 11:56, 02/03/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Да, это все хорошо, но вот если мне надо более гибкую схему проверки по группам?

    С samba2 это все работало так:
    external_acl_type NT_Group ttl=60 %LOGIN /usr/local/libexec/squid/wb_group
    acl InInetGroup external NT_Group Group1
    acl InInetGroup external NT_Group Group2
    и т.д.

    С samba3 такого не получается. Получается только задать жесткую привязку к одной группе, как это описано в статье.

    Может я что-то пропустил?

     
  • 1.11, Finch (??), 09:57, 03/03/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Люди, вопрос в тему
    дошёл до вот этого момента: wbinfo -a user%passwd
    Получаю вот что:

    su-2.05b# /usr/local/samba/bin/wbinfo -a user%passwd
    plaintext password authentication failed
    error code was NT_STATUS_NO_SUCH_USER (0xc0000064)
    error messsage was: No such user
    Could not authenticate user user%passwd with plaintext password
    challenge/response password authentication succeeded

    Кто с этим сталкивался? Как обходили?


     
     
  • 2.16, nuHrBuH (??), 17:55, 20/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Надо подставлять имя домена в юзернейм.
    Должна получиться строка вида: wbinfo -a domain+user%password (или wbinfo -a domain\user%password). Тогда проходит авторизация.
     
  • 2.24, CMEPTb (?), 18:01, 27/11/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Люди, вопрос в тему
    >дошёл до вот этого момента: wbinfo -a user%passwd
    >Получаю вот что:
    >
    >su-2.05b# /usr/local/samba/bin/wbinfo -a user%passwd
    >plaintext password authentication failed
    >error code was NT_STATUS_NO_SUCH_USER (0xc0000064)
    >error messsage was: No such user
    >Could not authenticate user user%passwd with plaintext password
    >challenge/response password authentication succeeded
    >
    >Кто с этим сталкивался? Как обходили?
    Я с ентой фигней столкнулся. У тебя вероятно используется "winbind separator = \ ", попробуй поставить стандартный "+", мне во всяком случае ето помогло.


     

  • 1.12, Atomic (??), 11:45, 03/03/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Этот вопрос меня очень долго интересует с момента перехода на samba 3!!!!!
     
     
  • 2.13, Finch (??), 17:21, 03/03/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Этот вопрос меня очень долго интересует с момента перехода на samba 3!!!!!
    >

    Ну а как авторизовываться то тогда????

     

  • 1.14, Atomic (??), 19:43, 03/03/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Меня скоро на шампур натянут на работе, если я не разобью по группам пользователей:)
     
  • 1.15, comatoz (??), 17:48, 11/03/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    По группам получилось авторизовать вот так
    #через группы домена
    auth_param      ntlm    program /usr/local/libexec/squid/ntlm_auth board\\taid
    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/bin/ntlm_auth --helper-protocol=squid-2.5-basic
    auth_param      basic   children 10
    auth_param      basic   realm Squid proxy-caching web server
    auth_param      basic   credentialsttl 2 minutes
    #auth_param     basic   credentialsttl 2 hours

    # внешний хелпер для acl через группы
    external_acl_type Domain_Group ttl=60 concurrency=5 %LOGIN /usr/local/libexec/squid/wbinfo_group.pl

    # группа Inet1-acl
    acl     Inet1-acl         external Domain_Group  Inet1
    http_access allow Inet1-acl all

    только пришлось напильником подравнять wbinfo_group.pl, т.к. он в качестве разделителя домена и пользователя понимает то что определенно в smb.conf, а ему подсовывают \, добавил строку
    # заменяем \ на +
            $user=~ tr/\\/+/s;
    в wbinfo_group.pl перед return.

     
  • 1.17, aleksandrk (??), 16:03, 15/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Esli server pod Win2003 so vsemi obnovlenijami, to  pomozet tol'ko posledniaja samba 3.0.14a
     
  • 1.18, Zhioorkie (?), 14:11, 29/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Hi! Check "proxycfg -u" under Windows XP for Windows update to work. BR, Zhioorkie
     
  • 1.19, ponka (?), 18:24, 30/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Всезнающие помогите, а то уже сил нет. RHEL 4.0 Samba 3.0.10, Squid 1.25. Самбу настроил, Winbind работает, в сквиде прописал аунтификацию. А он (squid) гад не пускает.

    В логе появляется вот такая запись:

    May 30 16:59:06 rhel kernel: audit(1117461546.224:0): avc:  denied  { create } for  pid=833 exe=/usr/sbin/winbindd name=winbindd.log scontext=root:system_r:winbind_t tcontext=root:object_r:samba_log_t tclass=file

    Подскажите где капать.

     
     
  • 2.20, nuHrBuH (??), 12:08, 17/08/2005 [^] [^^] [^^^] [ответить]  
  • +/
    wbinfo -p и wbinfo -t что возвращают?
    Машина в домен вошла нормально? KDC видит? Тикет получила?
    wbinfo -a авторизацию проходит?..
    Мало информации для помощи ;)
     
  • 2.21, nuHrBuH (??), 12:09, 17/08/2005 [^] [^^] [^^^] [ответить]  
  • +/
    И посмотри разрешению на папку, куда winbindd логи кладет. Похоже, просто не может создать лог-файл...
     

  • 1.22, Kapitan (??), 23:01, 28/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Может кому пригодится. Я на счет слов:
    > Пришлось указывать универсальный идентификатор группы в домене (SID).
    Попробуйте так:
    1) Если используется winbind separator = \ или просто не указывается в конфигурационном файле smb.conf, то --require-membership-of="Domain\\Group"
    2) Если же winbind separator = + , то указвайте --require-membership-of="Domain\+Group"

    В моем случае именно такой синтаксис уберег от прямого использования SID - все-таки так более нагляднее.
    Система: FreeBSD 4.11, Samba 3.0.20,1, domain W2K3

     
  • 1.25, Анатолий (??), 07:26, 03/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В самбе 3.0.26a столкнулся с такой траблой:
    не join'илась в домен до тех пор пока не прописал доменное имя своего хоста в /etc/hosts
    После этого действия получил заново тикет и только потом приджойнился.
    Так что имейте ввиду - есть такая трабла ;)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру