Squid Samba 3 NTLM-Authentifizierung

Transcription

Squid Samba 3 NTLM-Authentifizierung
Linux-AG des Bürgernetzes Dillingen e.V.
Methode zur transparenten Autorisierung und Authentifizierung
von Zugriffen auf das Internet über Squid von Windows NT/2000/2003
Domänen-Benutzern anhand ihrer Zugehörigkeit zu einer globalen Gruppe
Christian Maushart, 18.02.2004
Problemstellung:
In LANs, in denen eine Microsoft Windows-Domäne unter NT 4 oder eine Active Directory (AD)Umgebung unter Windows 2000 Server oder Windows 2003 Server betrieben wird, soll der
Internet-Zugang über einen Proxy-Server unter Linux (Squid) autorisiert und authentifiziert werden.
Es sollen aber alle User die Berechtigung für den Internet-Zugang haben, sondern nur diejenigen,
die einer bestimmten globalen Gruppe innerhalb der Domäne bzw. des AD angehören. Zudem
sollen die User möglichst keinen Passwortdialog vorgesetzt bekommen; die Autorisierung und
Authentifizierung soll transparent erfolgen.
Lösungsvorschlag:
In dieser Anleitung wird von der derzeit stabilen Debian Distribution 3.0r2 ausgegangen. Prinzipiell
ist die vorgestellte Lösung aber auch auf SuSE-Linux bzw. Redhat übertragbar. Grundlegende
Voraussetzung ist natürlich ein installierter Compiler (gcc) mit den üblichen Hilfsprogrammen
(make etc.)
Benötigt werden folgende Programme im Quelltext:
Samba 3.0.2a
Squid 2.5STABLE4
(http://www.samba.org)
(http://www.squid-cache.org)
Seit der Version 3 kann Samba auch mit AD Umgebungen im "einheitlichen Modus" umgehen.
Insbesondere das enthaltene Paket "winbind" wird in dieser Anleitung genutzt, um die Benutzer
und Gruppen in der Domäne bzw. im AD für Linux und damit für Squid sichtbar zu machen. Squid
kann dann mit Hilfe eines Perl-Skriptes die Gruppenmitgliedschaft des Users zuordnen und
entscheiden, ob der Internetzugang gewährt wird oder nicht. Das Programm nscd (Name Service
Cache Daemon) darf auf dem Linux-Rechner nicht laufen, da sonst die Authentifizierung nicht
funktioniert!
Im folgenden wird unterschieden, ob es sich um eine Windows NT 4 Domäne bzw. um ein
Windows 2000/2003 AD im "gemischten Modus" einerseits oder um ein Windows 2000/2003 AD
im "einheitlichen Modus" handelt.
Wir beginnen mit der einfacheren Variante:
Windows NT 4 Domäne bzw. Windows 2000/2003 AD im "gemischten Modus"
Samba/Winbind:
Das tar-Archiv samba-3.0.2a.tar.gz auspacken und in das Unterverzeichnis source wechseln
Anschließend die Befehle
./configure --with-winbind –with-winbind-auth-challenge
make
make install
eingeben.
Standardmäßig wird Samba damit unter /usr/local/samba installiert. Im Unterverzeichnis lib ist die
Datei smb.conf mit folgendem Mindestinhalt zu erstellen:
/usr/local/samba/lib/smb.conf:
[global]
workgroup = win2k3
security = domain
password server = 2k3svrde
encrypt passwords = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
In diesem Beispiel heisst die Domäne "win2k3". Der Domänencontroller heisst "2k3svrde".
Natürlich gibt es eine fast unüberschaubare Anzahl von weiteren Konfigurationsoptionen für
Samba. Wir beschränken uns hier aber auf den einzigen Zweck, warum wir Samba überhaupt
installiert haben: wir wollen die User und Gruppen aus der Windows Domäne bzw. dem AD unter
Linux sichtbar machen. Das funktioniert am einfachsten mit winbind, der aber ein installiertes
Samba voraussetzt.
Damit die Auflösung der Windows-User- und -Gruppennamen erfolgen kann muss die Datei /
etc/nsswitch.conf geändert werden:
/etc/nsswitch.conf:
passwd: files winbind
group: files winbind
hosts: files winbind dns
#passwd:
compat
#group:
compat
shadow:
compat
#hosts:
files dns
networks:
files
protocols:
db files
services:
db files
ethers:
db files
rpc:
db files
netgroup:
nis
Die bisherigen Eintragungen habe ich nicht gelöscht, sondern nur auskommentiert.
Jetzt können die erforderlichen Daemons (in der richtigen Reihenfolge!) gestartet werden:
/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/nmbd -D
/usr/local/samba/sbin/winbindd
Nun müssen wir mit unserem Linux-Rechner noch der Windows Domäne bzw. dem AD im
"gemischten Modus" beitreten:
/usr/local/samba/bin/net join win2k3 -U Administrator
Anschließend ist ein Passwort anzugeben. Es handelt sich hierbei um das Passwort des
Domänen-Administrators!
Bereits jetzt sollten die User und (globalen) Gruppen der Domäne bzw. des AD unter Linux
sichtbar werden.
Das Tool "wbinfo" (unter /usr/local/samba/bin zu finden) liefert hierbei wichtige Hinweise, ob alles
in Ordnung ist:
wbinfo -u zeigt die Domänenbenutzer an:
wbinfo -u:
Administrator
chris
Gast
krbtgt
SUPPORT_388945a0
wbinfo -g zeigt die gefundenen Gruppen an, wobei hier besonders die von uns auf dem Windows
NT bzw. 2000/2003 Server angelegte globale Gruppe "InternetUsers" von Interesse sein wird:
wbinfo -g:
DomDomDomDomDomSchema-Admins
Organisations-Admins
Richtlinien-Ersteller-Besitzer
DnsUpdateProxy
InternetUsers
wbinfo -t zeigt an, die die Authentifizierung klappt:
wbinfo -t:
checking the trust secret via RPC calls succeeded
wbinfo -a <USERNAME>%<PASSWORT> überprüft schliesslich, ob sich ein bestimmter User mit
seinem Passwort an der Domäne anmelden kann:
wbinfo -a chris%<PASSWORT>:
plaintext password authentication succeeded
challenge/response password authentication succeeded
Sollten andere als die gezeigten Meldungen beim Aufruf von wbinfo erscheinen, ist offenbar etwas
schief gegangen. Möglicherweise wurde Samba nicht mit den richtigen ./configure-Parametern
gebaut.
Das Thema Samba/Winbind ist damit abgeschlossen.
Squid:
Zunächst ist mit
addgroup squid
die Linuxgruppe Squid zu erzeugen.
Damit Squid mit Winbind kommunizieren kann, sind noch die beiden Befehle
chmod 750 /usr/local/samba/var/locks/winbindd_privileged
chgrp squid /usr/local/samba/var/locks/winbindd_privileged
erforderlich.
Anschließend kann das tar-Archiv squid-2.5.STABLE4.tar.gz ausgepackt werden. Im Verzeichnis
squid-2.5.STABLE4 ist anschließend
./configure --enable-auth=ntlm,basic \
--enable-external-acl-helpers=wbinfo_group
make
make install
einzugeben. Der Squid wird kompiliert.
Nach dem "make install" findet sich unter /usr/local/squid bereits eine squid.conf. Diese Datei ist
zu bearbeiten. Für unsere Zwecke sind die folgenden Einträge (in der richtigen Reihenfolge!!) zu
machen:
/usr/local/squid/etc/squid.conf:
cache_effective_user nobody
cache_effective_group squid
auth_param ntlm program /usr/local/samba/bin/ntlm_auth \
--helper-protocol=squid-2.5-ntlmssp -d 3
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/samba/bin/ntlm_auth \
--helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
external_acl_type ntgroup_helper ttl=10 %LOGIN \
/usr/local/squid/libexec/wbinfo_group.pl
acl proxyfullaccess external ntgroup_helper InternetUsers
acl AuthorizedUsers proxy_auth REQUIRED
http_access allow proxyfullaccess
http_access deny !proxyfullaccess
http_access allow AuthorizedUsers
http_access deny all
Squid kennt natürlich eine enorme Anzahl weiterer Konfigurationsoptionen. Diese können
selbstverständlich auch verwendet werden, nur sollten sie den oben stehenden Einträgen nicht
widersprechen.
Die Option -d 3 hinter dem helper-protocol squid-2.5-ntlmssp ist vor allem am Anfang zur
Fehlerdiagnose zu empfehlen, ebenso wie der ttl=10 Eintrag. Die Authentifizierungsvorgänge
können mit
tail -f /usr/local/squid/logs/cache.log
verfolgt werden.
Sollte alles zur Zufriedenheit laufen, kann der Parameter -d 3 entfernt werden. Auch der ttl-Wert
sollte auf 300 oder 600 erhöht werden.
Die Zeile
acl proxyfullaccess external ntgroup_helper InternetUsers
verdient besondere Beachtung. Der letzte Parameter "InternetUsers" muss mit der WindowsGruppe, deren Mitglieder ins Internet dürfen, übereinstimmen.
Würden alle User nur einen NTLM-fähigen Browser (Internet Explorer oder Mozilla mit einem
entsprechenden Plugin) verwenden, könnte man sich die Zeilen:
auth_param basic program /usr/local/samba/bin/ntlm_auth \
--helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl AuthorizedUsers proxy_auth REQUIRED
http_access deny !proxyfullaccess
http_access allow AuthorizedUsers
sparen. Da dem aber unter Umständen nicht so ist, sollten auch diese User irgendwie behandelt
werden. Genau dies erfolgt durch die obigen Zeilen. In diesen Fällen erhalten die User aber eine
Dialogbox, in der sie ihren Domänen-Usernamen sowie ihr Domänen-Passwort eintragen müssen.
Dies läßt sich leider nicht verhindern.
Sollte ein User nicht in der Domäne sein, erhält er keinen Zugriff auf das Internet, egal ob er einen
NTLM-fähigen Browser verwendet oder nicht.
Schließlich müssen noch folgende Befehle eingegeben werden:
mkdir /usr/local/squid/var/cache
chown nobody:squid /usr/local/squid/var/cache
chown nobody:squid /usr/local/squid/var/logs
/usr/local/squid/sbin/squid -z
Leider hat sich bei Samba 3.0.2 ein Ausgabeformat geändert, so dass die Datei
/usr/local/squid/libexec/wbinfo_group.pl, die bei Squid 2.5STABLE4 dabei ist, nicht funktioniert.
Statt dessen ist folgender Perl-Code als /usr/local/squid/libexec/wbinfo_group.pl zu speichern und
ausführbar zu machen (chmod a+x wbinfo_group.pl):
#!/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
# <[email protected]>. 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 <[email protected]>
#
# Version history:
#
2002-07-05 Jerry Murdock <[email protected]>
#
Initial release
#
#
2004-01-14 Michael "shortbus2" <[email protected]>
#
Modified code from multiple users at itmanagers forum
#
to allow multiple AD group support
#
added two lines for debug for `wbinfo -r`
#
# 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) = @_;
$user =~ s/\\\\/\\/;
$testcrap = `wbinfo -r \Q$user\E`;
&debug ("output -- wbinfo -r \Q$user\E\n$testcrap");
local($group);
foreach $group (@group)
{
$groupSID = `wbinfo -n "$group"`;
chomp $groupSID;
$groupGID = `wbinfo -Y "$groupSID"`;
chomp $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>)
{
chomp;
&debug ("Got $_ from squid");
($user, @group) = &shellwords;
$ans = &check($user, @group);
&debug ("Sending $ans to squid");
print "$ans\n";
}
So, jetzt sind eigentlich alle Vorarbeiten erledigt. Squid kann mit
/usr/local/squid/bin/squid
gestartet werden.
Falls alles in Ordnung ist, sollte ein ps -auxw | grep squid in etwa wie folgt aussehen:
root
28157 0.0 0.7 3472 980 ?
nobody
28159 8.5 3.2 6296 4084 ?
nobody
28160 0.8 0.7 3176 992 ?
2.5-ntlmssp -d 3
nobody
28161 0.9 0.7 3176 992 ?
2.5-ntlmssp -d 3
nobody
28162 0.9 0.7 3176 992 ?
2.5-ntlmssp -d 3
nobody
28163 1.0 0.7 3176 992 ?
2.5-ntlmssp -d 3
nobody
28164 0.8 0.7 3176 992 ?
2.5-ntlmssp -d 3
nobody
28165 1.0 0.7 3176 988 ?
2.5-basic
nobody
28166 1.0 0.7 3176 988 ?
2.5-basic
nobody
28167 0.9 0.7 3176 988 ?
2.5-basic
nobody
28168 1.0 0.7 3176 988 ?
2.5-basic
nobody
28169 0.9 0.7 3176 988 ?
2.5-basic
nobody
28170 0.0 0.8 2328 1020 ?
usr/local/squid/libexec/wbinfo_group.pl
nobody
28171 0.1 0.8 2328 1020 ?
usr/local/squid/libexec/wbinfo_group.pl
nobody
28172 0.0 0.8 2328 1020 ?
usr/local/squid/libexec/wbinfo_group.pl
nobody
28173 0.1 0.8 2328 1020 ?
usr/local/squid/libexec/wbinfo_group.pl
nobody
28174 0.1 0.8 2328 1020 ?
usr/local/squid/libexec/wbinfo_group.pl
S
S
S
20:43
20:43
20:43
0:00 /usr/local/squid/sbin/squid
0:01 (squid)
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 (ntlm_auth) --helper-protocol=squid-
S
20:43
0:00 /usr/bin/perl -w /
S
20:43
0:00 /usr/bin/perl -w /
S
20:43
0:00 /usr/bin/perl -w /
S
20:43
0:00 /usr/bin/perl -w /
S
20:43
0:00 /usr/bin/perl -w /
Windows Windows 2000/2003 AD im "einheitlichen Modus"
Damit die Authentifizierung im AD klappt, müssen folgende Pakete installiert werden:
apt-get
apt-get
apt-get
apt-get
install
install
install
install
libkrb5-dev
libpam-krb5
libldap2-dev
libpam0g-dev
Samba/Winbind:
Das tar-Archiv samba-3.0.2a.tar.gz auspacken und in das Unterverzeichnis source wechseln
Anschließend die Befehle
./configure --with-ads --with-pam --with-pam_smbpass --withwinbind --with-winbind-auth-challenge
make
make install
eingeben.
Die Datei smb.conf mit folgendem Mindestinhalt erstellen:
/usr/local/samba/lib/smb.conf:
[global]
workgroup = WIN2K3
security = ads
password server = 2k3svrde.win2k3.chris.bndlg.de
encrypt passwords = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
realm = win2k3.chris.bndlg.de
winbind use default domain = yes
Anschliessend die Datei /etc/krb5.conf erstellen:
/etc/krb5.conf:
[libdefaults]
ticket_lifetime = 24000
default_realm = win2k3.chris.bndlg.de
dns_lookup_realm = yes
dns_lookup_kdc = yes
[realms]
win2k3.chris.bndlg.de = {
kdc = 2k3svrde.win2k3.chris.bndlg.de
}
Die /etc/nsswitch.conf wie folgt anpassen:
/etc/nsswitch.conf:
passwd: files winbind
group: files winbind
hosts: files winbind dns
#passwd:
compat
#group:
compat
shadow:
compat
#hosts:
files dns
networks:
files
protocols:
db files
services:
db files
ethers:
db files
rpc:
db files
netgroup:
nis
Da das AD ohne einen Nameserver nicht auskommt, in der /etc/resolv.conf am besten den DNSServer des AD eintragen:
/etc/resolv.conf:
nameserver
<IP-Adresse des DNS>
Die Datei /etc/ld.so.conf um folgenden Eintrag ergänzen:
/etc/ld.so.conf:
/lib/security
Anschliessend noch einige Dateien in das richtige Verzeichnis kopieren, einen symbolischen Link
erstellen und den Linker-Cache neu erstellen:
cp /usr/src/samba-3.0.2a/source/nsswitch/libnss_winbind.so /lib
cp /usr/src/samba-3.0.2a/source/nsswitch/pam_winbind.so \
/lib/security
ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2
ldconfig
Jetzt können wir dem AD beitreten:
net ads join -U Administrator
Passwort ist das des Domänen-Admins.
Falls hier die Fehlermeldung:
"[2004/02/18 20:31:55, 0] libads/kerberos.c:ads_kinit_password(133)
kerberos_kinit_password [email protected] failed:
KDC has no
support for encryption type"
erscheint:
Auf dem Windows2000/2003-Server das Passwort für den Administrator neu vergeben; damit wird
anscheinend ein Kerberos-Ticket erstellt!
Im Erfolgsfall erscheint:
Using short domain name -- WIN2K3
Joined 'ASUSDEBIAN' to realm 'WIN2K3.CHRIS.BNDLG.DE'
Mit wbinfo -u, wbinfo -g, wbinfo -t, wbinfo -a <USERNAME>%<PASSWORT> kann wieder
überprüft werden, ob die AD-User und -Gruppen angezeigt werden und ob man sich gegenüber
dem AD authentifizieren kann. Wenn alles in Ordnung ist, sollten in etwa folgende Angaben
erscheinen:
wbinfo -u:
Administrator
Gast
SUPPORT_388945a0
2K3SVRDE$
krbtgt
chris
HOST/asusdebian
wbinfo -g:
DomDomSchema-Admins
Organisations-Admins
DomDomDomRichtlinien-Ersteller-Besitzer
DnsUpdateProxy
InternetUsers
wbinfo -t:
checking the trust secret via RPC calls succeeded
wbinfo -a chris%<PASSWORD>:
plaintext password authentication succeeded
challenge/response password authentication succeeded
PAM:
PAM steht für "pluggable authentication modules" ; damit können Linux-Programme z.B. über die
von winbind geholten AD-User -Gruppen verfügen. Damit dies funktioniert müssen folgende
Dateien angelegt werden:
/etc/pam.d/system-auth-winbind:
#%PAM-1.0
auth required /lib/security/pam_env.so
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_nologin.so
auth sufficient /lib/security/pam_winbind.so
auth sufficient /lib/security/pam_unix.so likeauth nullok \
use_first_pass shadow
auth required /lib/security/pam_deny.so
account sufficient /lib/security/pam_unix.so
account required /lib/secuirty/pam_winbind.so
password required /lib/security/pam_cracklib.so retry=3 type=
password sufficient /lib/security/pam_unix.so nullok \
use_authtok md5 shadow
password required /lib/security/pam_deny.so
session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so
/etc/pam.d/samba:
#%PAM-1.0
auth required pam_nologin.so
auth required pam_stack.so service=system-auth-winbind
account required pam_stack.so service=system-auth-winbind
session required pam_stack.so service=system-auth-winbind
password required pam_stack.so service=system-auth-winbind
/etc/pam.d/squid:
#%PAM-1.0
auth required /lib/security/pam_stack.so \
service=system-auth-winbind
account required /lib/security/pam_stack.so \
service=system-auth-winbind
Squid:
Zunächst ist mit
addgroup squid
die Linuxgruppe Squid zu erzeugen.
Damit Squid mit Winbind kommunizieren kann, sind noch die beiden Befehle
chmod 750 /usr/local/samba/var/locks/winbindd_privileged
chgrp squid /usr/local/samba/var/locks/winbindd_privileged
erforderlich.
Anschließend kann das tar-Archiv squid-2.5.STABLE4.tar.gz ausgepackt werden. Im Verzeichnis
squid-2.5.STABLE4 ist anschließend
./configure --enable-ssl --enable-auth=ntlm,basic \
--enable-external-acl-helpers=wbinfo_group
make
make install
einzugeben. Der Squid wird kompiliert.
Nach dem "make install" findet sich unter /usr/local/squid bereits eine squid.conf. Diese Datei ist
zu bearbeiten. Für unsere Zwecke sind die folgenden Einträge (in der richtigen Reihenfolge!!) zu
machen:
/usr/local/squid/etc/squid.conf:
cache_effective_user nobody
cache_effective_group squid
auth_param ntlm program /usr/local/samba/bin/ntlm_auth \
--helper-protocol=squid-2.5-ntlmssp -d 3
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/samba/bin/ntlm_auth \
--helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
external_acl_type ntgroup_helper ttl=10 %LOGIN \
/usr/local/squid/libexec/wbinfo_group.pl
acl proxyfullaccess external ntgroup_helper InternetUsers
acl AuthorizedUsers proxy_auth REQUIRED
http_access
http_access
http_access
http_access
allow proxyfullaccess
deny !proxyfullaccess
allow AuthorizedUsers
deny all
Squid kennt natürlich eine enorme Anzahl weiterer Konfigurationsoptionen. Diese können
selbstverständlich auch verwendet werden, nur sollten sie den oben stehenden Einträgen nicht
widersprechen.
Die Option -d 3 hinter dem helper-protocol squid-2.5-ntlmssp ist vor allem am Anfang zur
Fehlerdiagnose zu empfehlen, ebenso wie der ttl=10 Eintrag. Die Authentifizierungsvorgänge
können mit
tail -f /usr/local/squid/logs/cache.log
verfolgt werden.
Sollte alles zur Zufriedenheit laufen, kann der Parameter -d 3 entfernt werden. Auch der ttl-Wert
sollte auf 300 oder 600 erhöht werden.
Die Zeile
acl proxyfullaccess external ntgroup_helper InternetUsers
verdient besondere Beachtung. Der letzte Parameter "InternetUsers" muss mit der WindowsGruppe, deren Mitglieder ins Internet dürfen, übereinstimmen.
Würden alle User nur einen NTLM-fähigen Browser (Internet Explorer oder Mozilla mit einem
entsprechenden Plugin) verwenden, könnte man sich die Zeilen:
auth_param basic program /usr/local/samba/bin/ntlm_auth \
--helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl AuthorizedUsers proxy_auth REQUIRED
http_access deny !proxyfullaccess
http_access allow AuthorizedUsers
sparen. Da dem aber unter Umständen nicht so ist, sollten auch diese User irgendwie behandelt
werden. Genau dies erfolgt durch die obigen Zeilen. In diesen Fällen erhalten die User aber eine
Dialogbox, in der sie ihren Domänen-Usernamen sowie ihr Domänen-Passwort eintragen müssen.
Dies läßt sich leider nicht verhindern.
Sollte ein User nicht in der Domäne sein, erhält er keinen Zugriff auf das Internet, egal ob er einen
NTLM-fähigen Browser verwendet oder nicht.
Schließlich müssen noch folgende Befehle eingegeben werden:
mkdir /usr/local/squid/var/cache
chown nobody:squid /usr/local/squid/var/cache
chown nobody:squid /usr/local/squid/var/logs
/usr/local/squid/sbin/squid -z
Leider hat sich bei Samba 3.0.2 ein Ausgabeformat geändert, so dass die Datei
/usr/local/squid/libexec/wbinfo_group.pl, die bei Squid 2.5STABLE4 dabei ist, nicht funktioniert.
Statt dessen ist folgender Perl-Code als /usr/local/squid/libexec/wbinfo_group.pl zu speichern und
ausführbar zu machen (chmod a+x wbinfo_group.pl):
/usr/local/squid/libexec/wbinfo_group.pl:
#!/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
# <[email protected]>. 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 <[email protected]>
#
# Version history:
#
2002-07-05 Jerry Murdock <[email protected]>
#
Initial release
#
#
2004-01-14 Michael "shortbus2" <[email protected]>
#
Modified code from multiple users at itmanagers forum
#
to allow multiple AD group support
#
added two lines for debug for `wbinfo -r`
#
# 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) = @_;
$user =~ s/\\\\/\\/;
$testcrap = `wbinfo -r \Q$user\E`;
&debug ("output -- wbinfo -r \Q$user\E\n$testcrap");
local($group);
foreach $group (@group)
{
$groupSID = `wbinfo -n "$group"`;
chomp $groupSID;
$groupGID = `wbinfo -Y "$groupSID"`;
chomp $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>)
{
chomp;
&debug ("Got $_ from squid");
($user, @group) = &shellwords;
$ans = &check($user, @group);
&debug ("Sending $ans to squid");
print "$ans\n";
}