Hallo Leute,
kleiner Nachtrag – manchmal hat man einfache keine Kopie dieses tollen Perl-Skripts.
Perl-Skript wbinfo_group.pl
1. Allgemeines
2. Das Perl-Skript
1. Allgemeines
Was macht die Datei „wbinfo_group.pl“?
Dieses kleine Perl-Skript fragt per „wbinfo“ die GID/SID der zu prüfenden Gruppe eines ADS ab und bestätigt ob der übergebene Benutzer Zugriff auf diese hat.
Wie kann ich diese Datei testen?
In der Annahme das Perl kein Problem darstellt, sollte diese Datei einfach aufgerufen werden – im Idealfalle mit der Option „-d“ für Debug:
perl ./wbinfo_group.pl -d
Nun wartet das Skript auf Eingabe in Form von: „<Benutzer> <Gruppe>“.
Im Endeffekt wird ausgeben welche Daten erkannt/abgefragt werden konnten und ob der Benutzer Mitglied dieser Gruppe ist.
Voraussetzungen?
Das Linux sollte per Winbind eine Bindung mit einem ADS eingegangen und in der Lage per „wbinfo“ Benutzer/Gruppen-Daten abzufragen sein.
Für RHEL/CentOS bietet sich falls dies noch nicht Konfiguriert wurde an folgenden Assisntenten aufzurufen:
# Konfiguration Zugriff auf ADS
authconfig-tui
# Abfrage aller Benutzer/Gruppen des ADS
wbinfo -u
wbinfo -g
Alternativ kann man die benötigten Daten für Winbind unter foglenden Konfigurationsdateien finden:
/etc/samba/smb.conf – Samba ADS Realm Einstellungen
/etc/krb5.conf – Kerberos Einstellungen
service winbind restart
# Befehl um sich mit den hinterlegten Einstellungen am ADS einzuloggen
net ads join -U administrator
Ok, genug davon – hier das Perl-Skript:
#!/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:
# 2005-12-26 Guido Serassio <guido.serassio@acmeconsulting.it>
# Add ‚-d‘ command line debugging option
#
# 2005-12-24 Guido Serassio <guido.serassio@acmeconsulting.it>
# Fix for wbinfo from Samba 3.0.21
#
# 2004-08-15 Henrik Nordstrom <hno@squid-cache.org>
# Helper protocol changed to URL escaped in Squid-3.0
#
# 2005-06-28 Arno Streuli <astreuli@gmail.com>
# Add multi group check
#
# 2002-07-05 Jerry Murdock <jmurdock@itraktech.com>
# Initial release
#
# Globals
#
use vars qw/ %opt /;
# Disable output buffering
$|=1;
sub debug {
print STDERR „@_n“ if $opt{d};
}
#
# Check if a user belongs to a group
#
sub check {
local($user, $group) = @_;
$groupSID = `wbinfo -n „$group“ | cut -d“ “ -f1`;
chop $groupSID;
$groupGID = `wbinfo -Y „$groupSID“`;
chop $groupGID;
&debug( „User: -$user-nGroup: -$group-nSID: -$groupSID-nGID: -$groupGID-„);
return ‚OK‘ if(`wbinfo -r Q$userE` =~ /^$groupGID$/m);
return ‚ERR‘;
}
#
#
# 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:
# 2005-12-26 Guido Serassio <guido.serassio@acmeconsulting.it>
# Add ‚-d‘ command line debugging option
#
# 2005-12-24 Guido Serassio <guido.serassio@acmeconsulting.it>
# Fix for wbinfo from Samba 3.0.21
#
# 2004-08-15 Henrik Nordstrom <hno@squid-cache.org>
# Helper protocol changed to URL escaped in Squid-3.0
#
# 2005-06-28 Arno Streuli <astreuli@gmail.com>
# Add multi group check
#
# 2002-07-05 Jerry Murdock <jmurdock@itraktech.com>
# Initial release
#
# Globals
#
use vars qw/ %opt /;
# Disable output buffering
$|=1;
sub debug {
print STDERR „@_n“ if $opt{d};
}
#
# Check if a user belongs to a group
#
sub check {
local($user, $group) = @_;
$groupSID = `wbinfo -n „$group“ | cut -d“ “ -f1`;
chop $groupSID;
$groupGID = `wbinfo -Y „$groupSID“`;
chop $groupGID;
&debug( „User: -$user-nGroup: -$group-nSID: -$groupSID-nGID: -$groupGID-„);
return ‚OK‘ if(`wbinfo -r Q$userE` =~ /^$groupGID$/m);
return ‚ERR‘;
}
#
# Command line options processing
#
sub init()
{
use Getopt::Std;
my $opt_string = ‚hd‘;
getopts( „$opt_string“, %opt ) or usage();
usage() if $opt{h};
}
#
# Message about this program and how to use it
#
sub usage()
{
print „Usage: wbinfo_group.pl -dhn“;
print „t-d enable debuggingn“;
print „t-h print the helpn“;
exit;
}
init();
print STDERR „Debugging mode ON.n“ if $opt{d};
#
# Main loop
#
while (<STDIN>) {
# diese Variable wurde von mir hier definiert
$ans = „ERR“;
chop;
&debug („Got $_ from squid“);
($user, @groups) = split(/s+/);
$user =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack(„c“,hex($1))/eg;
# test for each group squid send in it’s request
foreach $group (@groups) {
$group =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack(„c“,hex($1))/eg;
$ans = &check($user, $group);
last if $ans eq „OK“;
}
&debug („Sending $ans to squid“);
print „$ansn“;
}