URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID12
Нить номер: 3857
[ Назад ]

Исходное сообщение
"Авторизация пользователей по группам"

Отправлено charley , 09-Фев-06 14:31 
Есть сервер FreeBSD 5.4, на нём Samba 3.0.12 и Squid 2.5 stable12. Контроллер домена на NT4.
Нужно пропускать юзеров в инет только если они в определённой доменной группе.

В Squid'е прописал:
auth_param ntlm program /где-то там/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=DOMAIN\\Squidgroup

acl Squidgroup proxy_auth REQUIRED
http_access allow Squidgroup
http_access deny all

Но пропускает ЛЮБЫХ доменных пользователей!
А нужно только из определённой группы. Подскажите, кто знает.


Содержание

Сообщения в этом обсуждении
"Авторизация пользователей по группам"
Отправлено dxer , 09-Фев-06 17:21 
>Есть сервер FreeBSD 5.4, на нём Samba 3.0.12 и Squid 2.5 stable12.
>Контроллер домена на NT4.
>Нужно пропускать юзеров в инет только если они в определённой доменной группе.
>
>
>В Squid'е прописал:
>auth_param ntlm program /где-то там/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=DOMAIN\\Squidgroup
>
>acl Squidgroup proxy_auth REQUIRED
>http_access allow Squidgroup
>http_access deny all
>
>Но пропускает ЛЮБЫХ доменных пользователей!
>А нужно только из определённой группы. Подскажите, кто знает.


Указывай SID группы в виде
auth_param basic program /usr/local/samba/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=S-1-5-21-1844237615-1035525444-725345543-1236


"Авторизация пользователей по группам"
Отправлено charley , 09-Фев-06 18:32 
>Указывай SID группы в виде
>auth_param basic program /usr/local/samba/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=S-1-5-21-1844237615-1035525444-725345543-1236

Делал так. не помогает :-(


"Авторизация пользователей по группам"
Отправлено Дмитрий , 27-Апр-06 15:00 
Сам сейчас разбираюсь.
Причем на одном сервере все ОК.
А со вторым проблема, авторизирует всех пользователей домена, а не только из заданной группы.
А вот запись у тебя правильная СиАйДишник можно не указывать. У тебя корректно он преобразуется из Записи Domain\SquidGroup.
Тут в другом проблема... но вот в чем?

"Авторизация пользователей по группам"
Отправлено Nichls , 17-Май-06 13:39 
>Сам сейчас разбираюсь.
>Причем на одном сервере все ОК.
>А со вторым проблема, авторизирует всех пользователей домена, а не только из
>заданной группы.
>А вот запись у тебя правильная СиАйДишник можно не указывать. У тебя
>корректно он преобразуется из Записи Domain\SquidGroup.
>Тут в другом проблема... но вот в чем?

Привет. Год назад решал подобную проблему. Скажу честно - замучился искать решение, но нашел.
Работает примерно на 800 пользователях.

Привожу свои конфиги. Уверен, что помогут.

----------------------------------------------------------------------------------------------------------
В squid.conf
----------------------------------------------------------------------------------------------------------
Здесь описываем внешие ACL
external_acl_type InetGroup-proxy-08-20ww %LOGIN /usr/local/squid/libexec/wbinfo_group.pl
# accesse in internet in work week from 08-00 to 20-00
external_acl_type InetGroup-proxy-08-20aw %LOGIN /usr/local/squid/libexec/wbinfo_group.pl
# accesse in internet in all week from 08-00 to 20-00
external_acl_type InetGroup-proxy-00-24all %LOGIN /usr/local/squid/libexec/wbinfo_group.pl
# accesse in internet in all week from 00-00 to 24-00

# Проверь свои пути
auth_param ntlm children 20
auth_param ntlm program /usr/local/samba/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes

auth_param basic children 20
auth_param basic program /usr/local/samba/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

# Говорим, что нужна авторизация
acl you_domain proxy_auth REQUIRED

# Разграничиваем доступ по времени
acl work-week time MTWHF 08:00-20:00 #  Доступ с 08-00 до 20-00 с понедельника по пятницу
acl all-week time SMTWHFA 08:00-20:00 # Доступ с 08-00 до 20-00 всю неделю
acl all-time time SMTWHFA 00:00-24:00 # Доступ круглосуточно всю неделю

# Осуществляем проверку на принадлежность к нужно группе
acl InetAccess-proxy-08-20ww external InetGroup-proxy-08-20ww proxy-08-20ww
acl InetAccess-proxy-08-20aw external InetGroup-proxy-08-20aw proxy-08-20aw
acl InetAccess-proxy-00-24all external InetGroup-proxy-00-24all proxy-00-24all

# Собираем все в кучу и проверяем на предмет получения дуступа к ИНТЕРНЕТ
http_access allow you_domain work-week InetAccess-proxy-08-20ww
http_access allow you_domain all-week InetAccess-proxy-08-20aw
http_access allow you_domain all-time InetAccess-proxy-00-24all

proxy-08-20ww, proxy-08-20aw, proxy-00-24all - Группы в домене. В них заносишь тех юзеров, которым разрешен доступ.

----------------------------------------------------------------------------------------------------------
wbinfo_group.pl
Используй именно этот скрипт. В том, что идет в комплекте со squid имеется ошибка.
Здесь она исправлена.
----------------------------------------------------------------------------------------------------------
#!/usr/bin/perl -w
#
# external_acl helper to Squid to verify NT Domain group
# membership using /usr/local/samba/bin/wbinfo
#
# This program is put in the public domain by Jerry Murdock
# <jmurdock@itraktech.com>. It is distributed in the hope that it will
# be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Author:
#   Jerry Murdock <jmurdock@itraktech.com>
#
# Version history:
#   2002-07-05 Jerry Murdock <jmurdock@itraktech.com>
#               Initial release
#

# external_acl uses shell style lines in it's protocol
require 'shellwords.pl';

# Disable output buffering
$|=1;

sub debug {
        # Uncomment this to enable debugging
        print STDERR "@_\n";
}

#
# Check if a user belongs to a group
#
sub check {
        local($user, $group) = @_;
        $groupSID = `/usr/local/samba/bin/wbinfo -n "$group"`;
#        chop  $groupSID;
        # because wbinfo -n also returns the group number
        $groupSID = substr($groupSID,0,index($groupSID," ",0));
        $groupGID = `/usr/local/samba/bin/wbinfo -Y "$groupSID"`;
        chop $groupGID;
#       &debug( "User:  -$user-\nGroup: -$group-\nSID:   -$groupSID-\nGID:   -$groupGID-");
        return 'OK' if(`/usr/local/samba/bin/wbinfo -r \Q$user\E` =~ /^$groupGID$/m);
        return 'ERR';
}
#
# Main loop
#
while (<STDIN>) {
        chop;
        &debug ("Got $_ from squid");
        ($user, $group) = &shellwords;
        $ans = &check($user, $group);
        &debug ("Sending $ans to squid");
        print "$ans\n";
}

----------------------------------------------------------------------------------------------------------
smb.conf
----------------------------------------------------------------------------------------------------------

[global]
        workgroup = YOU-DOMAIN
        realm = YOU-DOMAIN.RU
        netbios name = demon
        server string =  Proxy Server
        hosts allow = 10. 127.
        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
        max log size = 50
        security = domain
        password server = srv1 srv3
        encrypt passwords = yes

srv1 и srv3 - PRIMARY and BACKUP контроллеры домена

----------------------------------------------------------------------------------------------------------
root@demon#tail -f /usr/local/squid/var/logs/cache.log
Got YOU-DOMAIN\\user1 proxy-08-20ww from squid
Sending ERR to squid
Got YOU-DOMAIN\\user1 proxy-08-20aw from squid
Sending ERR to squid
Got YOU-DOMAIN\\user1 proxy-00-24all from squid
Sending OK to squid
# Тут явно видно, что пользователя user1 нашли в группе proxy-00-24all и squid'у передано OK
Got YOU-DOMAIN\\user2 proxy-08-20ww from squid
Sending OK to squid
Got YOU-DOMAIN\\user3 proxy-08-20ww from squid
Sending OK to squid

root@demon#tail -f /usr/local/squid/var/logs/access.log
1147851551.270     20 10.66.107.56 TCP_IMS_HIT/304 251 GET http://img.mail.ru/mail/ru/css/mail-main1.css YOU-DOMAIN\user1 NONE/- text/css

Вот в общем-то и все.
Если что-то не заработает - пиши.
Коментарии приветствуются.
С Уважением, Александр.

----------------------------------------------------------------------------------------------------------
PS
Вот wbinfo_group.pl из потавки squid-2.5.STABLE12. И который у меня не заработал.
Как говорится, найдите 10 отличий :-)

----------------------------------------------------------------------------------------------------------
#!/usr/bin/perl -w
#
# external_acl helper to Squid to verify NT Domain group
# membership using wbinfo
#
# This program is put in the public domain by Jerry Murdock
# <jmurdock@itraktech.com>. It is distributed in the hope that it will
# be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Author:
#   Jerry Murdock <jmurdock@itraktech.com>
#
# Version history:
#   2002-07-05 Jerry Murdock <jmurdock@itraktech.com>
#               Initial release
#
#   2005-06-28 Arno Streuli <astreuli@gmail.com>
#               Add multi group check


# external_acl uses shell style lines in it's protocol
require 'shellwords.pl';

# Disable output buffering
$|=1;

sub debug {
        # Uncomment this to enable debugging
        #print STDERR "@_\n";
}

#
# Check if a user belongs to a group
#
sub check {
        local($user, $group) = @_;
        $groupSID = `wbinfo -n "$group"`;
        chop  $groupSID;
        $groupGID = `wbinfo -Y "$groupSID"`;
        chop $groupGID;
        &debug( "User:  -$user-\nGroup: -$group-\nSID:   -$groupSID-\nGID:   -$groupGID-");
        return 'OK' if(`wbinfo -r \Q$user\E` =~ /^$groupGID$/m);
        return 'ERR';
}

#
# Main loop
#
while (<STDIN>) {
        chop;
        &debug ("Got $_ from squid");
        ($user, @groups) = &shellwords;
        # test for each group squid send in it's request
        foreach $group (@groups) {
                $ans = &check($user, $group);
                last if $ans eq "OK";
        }
        &debug ("Sending $ans to squid");
        print "$ans\n";
}


"Авторизация пользователей по группам"
Отправлено Ivan , 14-Июн-06 13:09 
Небольшое дополнение:
Информация о членстве в группе хранится в кеше squida (по умолчанию) 1 час, а в кеше Winbinda - 300 сек. Чтобы не ждать столько времени при перемещении пользователя из одной группы в другую советую добавить в squid.conf при описании внешиx ACL опцию ttl,
примерно так:

external_acl_type InetGroup-proxy-08-20ww ttl=0 %LOGIN /usr/local/squid/libexec/wbinfo_group.pl

а в smb.conf:
[global]
         winbind cache time = 0

Удачи.


"Авторизация пользователей по группам"
Отправлено Nichls , 29-Авг-06 11:20 
>Небольшое дополнение:
>Информация о членстве в группе хранится в кеше squida (по умолчанию) 1
>час, а в кеше Winbinda - 300 сек. Чтобы не ждать
>столько времени при перемещении пользователя из одной группы в другую советую
>добавить в squid.conf при описании внешиx ACL опцию ttl,
>примерно так:
>
> external_acl_type InetGroup-proxy-08-20ww ttl=0 %LOGIN /usr/local/squid/libexec/wbinfo_group.pl
>
>а в smb.conf:
> [global]
>         winbind cache time
>= 0
>
>Удачи.


Большое спасибо за совет.


"Авторизация пользователей по группам"
Отправлено rsa , 12-Апр-08 19:53 
вареантов просто куча самы простой собираеш squid с поддержкой arp примерно во так

./configure --prefix=/usr/local/squid --enable-delay-pools \
--enable-arp-acl --enable-storeio=ufs,aufs --enable-async-io \
--enable-poll --enable-auth=basic,ntlm --enable-auth-modules=SMB \
--enable-basic-helpers=SMB --enable-ntlm-modules=SMB --enable-ssl \
--disable-internal-dns

потом в конфиге прописываеш

#Defaults:
acl all src 192.168.1.0/255.255.255.0

# Авторизация по ARP
acl ra       arp 00:22:45:e5:fb:c0
acl ri       arp 00:22:45:fb:09:62
acl mar      arp 00:a0:db:5c:f4:6e


http_access allow localhost
http_access allow ra
http_access allow ri
http_access allow mar

http_access deny all

и все проблемы ходить будут только сетевухи с этими маками


"Авторизация пользователей по группам"
Отправлено Nichls , 14-Апр-08 13:54 
>вареантов просто куча самы простой собираеш squid с поддержкой arp примерно во
>так
>
>./configure --prefix=/usr/local/squid --enable-delay-pools \
> --enable-arp-acl --enable-storeio=ufs,aufs --enable-async-io \
> --enable-poll --enable-auth=basic,ntlm --enable-auth-modules=SMB \
> --enable-basic-helpers=SMB --enable-ntlm-modules=SMB --enable-ssl \
> --disable-internal-dns
>

Большое спасибо за чтоль ценный камментарий.
Буду иметь ввиду.