>Сам сейчас разбираюсь.
>Причем на одном сервере все ОК.
>А со вторым проблема, авторизирует всех пользователей домена, а не только из
>заданной группы.
>А вот запись у тебя правильная СиАйДишник можно не указывать. У тебя
>корректно он преобразуется из Записи 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";
}