webmin modul für unix und samba account anlegen


jden44

New Member
Hallo,

ich habe ein Problem.
Und zwar hat ein Praktikant vor etlicher Zeit das Modul usermgr für Webmin so abgeändert, daß man damit sowohl im Unix und gleichzeitigt im Samba User anlegen, bearbeiten und löschen kann. Gleichzeitig kann man auch Quotas anlegen und verändern.

Das hat bisher einwandfrei funktioniert. Ich hatte Suse 10.2 bisher am laufen.
Nun muss ich aber auf einen virtuellen Server gehen, wegen mehrerer Betriebssysteme (mehrere Linuxe und Windows Server 2008), ich teste es auf xenserver 5.0. Bisher das Beste was es gibt mit einwandfreier Managment Oberfläche (XenCenter) und dann noch kostenlos. (btw. das Problem hat sicher nichts mit dem XenServer 5.0 zu tun)

Darauf lasse ich aus Testgründen Ubuntu 8.04 (LTS) und Opensuse 11.1 laufen. Ich habe schon etliche Teste mit verschiedenen anderen Programmen gemacht, die ich auch unbedingt brauche (HAVP, dansguardian, clamav, etc)
alle compiled und laufen einwandfrei auf Ubuntu 8.04.
Beide Linux Distributionen haben natürlich Samba an Board und ich habe das so konfiguriert, das die smbpasswd benutzt wird.

Nun ist das Problem so, das auf Opensuse 11.1 die Unix/Samba account Erzeugung mit dem Webmin Modul einwandfrei funktioniert, aber eben auf Ubuntu 8.04 nicht.

Ich muss aber Ubuntu 8.04 aus zwei Gründen einsetzen,
1. wegen LTS (long term support bis 2013)
2. mit Ubuntu läuft die Paravirtualisierung einwandfrei, mit opensuse nicht.

Händisch läuft es einwandfrei auf beiden Systemen nachdem der Unix account angelegt ist mit smbpasswd -a name. Darauf wird zweimal
das passwort abgefragt und bestätigt.

Auf beiden Linuxen läuft Samba (3.0.28a auf Ubuntu und 3.2.7 auf Opensuse)

Nun zu meiner Frage:
Gibt es hier Leute, die sich mit cgi/perl Programmierung gut auskennen und mir helfen können?

Besten Dank im voraus.
jden44
 
Danke Huschi für die schnelle Reaktion,

hier meine erste weitere Frage:

wie kann ich das webmin Modul debuggen,
sodaß ich beispielsweise einen log von der
Abarbeitung des cgi/perl scriptes erhalte.

perl -d alleine funktioniert nicht.
 
Da Webmin auf eine CGI-Umgebung basiert die im Regelfall das Perl-Programm "miniserv" stellt, musst Du wohl diesen miniserv mit -d starten.
Aber ich bezweifel, dass Du damit glücklich wirst. ;)

Ich würde ganz anders vorgehen:
a) Das entsprechende Modul im Original besorgen und die Veränderungen feststellen.
b) Da es wohl nur Unterschiede innerhalb der Distributionen sind, tippe ich auf Verzeichnisse/Dateien, die wohl unterschiedliche Orte haben.
c) Genau nach diesen möglichen Vorkommen von b) suchen.

huschi.
 
Hallo Huschi,

leider ist das useradmin Modul in neueren Webmin geändert worden.
Unser orginal Modul useradmin, das wir erweitert haben, beruhte noch auf einen älteren Stand. Aber das ist wahrscheinlich nicht entscheident.

Oben in der Statusanzeige zeigt er ja, das im Linux der User angelegt wurde, ein Homeverzeichniss erstell wurde und nur die smbpasswd nicht angelegt wurde oder richtiger gescheitert ist.
Hier der Orginal Statusbericht aus dem von uns geänderten Webmin Modul:

Code:
Paßwort wird generiert:8 -> 1 erfolgt
Das Paßwort lautet:T230vX5j
Benutzer test wird angelegt: erfolgt
Die primäre Gruppe ist: schueler
Das Heimatverzeichnis befindet sich unter: /home/schueler/test
Samba-Benutzer wird eingerichtet: gescheitert [RC = 1]

Hier der Auszug aus dem webmin Modul useradd:
Code:
#############################################################################
#Anlegen des Benutzer und des Samba-Accounts
if ($in{rad_passwd} eq "yes" or $passwdvalid eq "ok"){
    print text(useradd4, $in{txt_username}) . ": ";
    $crypt=crypt($passwd,(join '',('.','/',0..9,'A'..'Z','a'..'z')[rand 64, rand 64]));
    if ($in{rad_skel} eq "yes"){
        $return = system("useradd -g $in{pop_group} -d $in{userhome} -s $in{rad_shell} -c \"$in{txt_realname}\" -m -k $in{skel} -p \"$crypt\" $in{txt_username} >/dev/null 2>&1") / 256;
    }
    else {
        $return = system("useradd -g $in{pop_group} -d $in{userhome} -s $in{rad_shell} -c \"$in{txt_realname}\" -p $crypt $in{txt_username} >/dev/null 2>&1") / 256;
    }    
    if ($return == 0){
        print "<b>$text{return1}</b>\n";
        print "$text{useradd5}: <b>$in{pop_group}</b>\n";
        print "$text{useradd6}: <b>$in{userhome}</b>\n";
    }
    else {
        print "<b>$text{return2} [" . 
            hlink("RC = $return","systemprogs#ua$return") . "]</b>\n";
    }
    if ($in{rad_smb} eq "yes" and $return == 0){
        print "$text{useradd7}: ";
        $return = system("echo -e \"$passwd\n$passwd\n\"|smbpasswd -a -s $in{txt_username} >/dev/null 2>&1") /256;	
	if ($return == 0){
            print "<b>$text{return1}</b>\n";
        }
        else {
            print "<b>$text{return2} [" . 
                hlink("RC = $return", "systemprogs#sm$return") . "]</b>\n";
        }
    }
    elsif ($in{rad_smb} eq "yes"){
        print "$text{useradd7}: <b>$text{return3}</b>\n";
    }
    if ($in{quota} eq "ja" and $return == 0){
	print "$text{useradd10}: ";
        $return = system("/usr/sbin/setquota -u $in{txt_username} $quotawerte -a>/dev/null 2>&1") /256;	
	if ($return == 0){
            print "<b>$text{return1}</b> ($quotawerte_text)\n";
        }
        else {
            print "<b>$text{return2} [" . 
                hlink("RC = $return", "systemprogs#qu$return") . "]</b>\n";
        }

    }
    print "</pre>";
}
print "<hr>";
####################################################
MOD: Bitte [noparse]
Code:
...
[/noparse]-Tags um Ausgaben, Code, etc. verwenden (im Editor auch mit '#' erreichbar). Danke!


Offensichtlich passiert der Fehler irgenwie mit dem smbpasswd.
Man müsste den Perl Interpreter stepbystep executen lassen mit Ausgabe, dann würde man den Fehler wahrscheinlich sehen.
Wie gesagt, mit opensuse 11.1 läuft es einwandfrei mit dem gleichen Modul.

Ich habe noch keine Datei unverträglichkeit feststellen können.

jden44
 
Last edited by a moderator:
$return = system("echo -e \"$passwd\n$passwd\n\"|smbpasswd -a -s $in{txt_username} >/tmp/logfile 2>&1") /256;
... und dann mal schauen.

smbpasswd liefert leider immer den Exit-Code 1, wenn was schiefgeht.
 
Nach ändern auf /tmp/logfile

Ausgabe bei ubuntu 8.04 in /tmp/logfile
mismatch - password unchanged.
Unable to get new password.

Ausgabe bei opensuse 11.1 in /tmp/logfile
Added user test.

Entweder interpretiert Perl bei ubuntu die Anweisung anders oder Voraussetzungen sind unterschiedlich. Habe aber bisher keinen Hinweis darauf gefunden.
 
Hier noch die Pearl Versionen:
Perl interpreter in Opensuse 11.1 Release 5.10.0
Perl interpreter in Ubuntu 8.04 Release 5.8.8
 
Es liegt wahrscheinlich nicht am Perl sondern am smbpasswd.
Teste die Zeile doch mal per Hand in der Konsole:
Code:
echo -e "meinPW\nmeinPW\n" | smbpasswd -a -s meinUser

huschi.
 
Hallo Huschi,

dieser command syntax erzeugt in beiden Betriebssystemen einwandfrei einen
User in der smbpasswd.

Vielleicht noch weitere gute Ideen?
 
Hier noch den Auszug aus dem cgi-script (der vor dem Anlegen der User ausgeführt wird) für die Generierung und Übergabe in die $passwd Variable. (zur Fehlersuche wahrscheinlich wichtig)

Code:
#############################################################################
#Generierung des Paßwortes, Paßwortvalidierung, Ausgabe von HTML-Code
#für das Eingeben des Paßwortes
if ($in{rad_passwd} eq "yes"){
    print "$text{useradd1}:";
    #########################################################################
    #Initialisierung des Zufallszahlengenerator und
    #
    srand (time() ^ ($$ + ($$ << 15)));
    print "$config{'passlenght'} -> $config{'passsystem'}\n";
    $passwd=passwdgen($in{txt_username},$config{'passlenght'},$config{'passsystem'});
    print "<b>$text{return1}</b>\n";
    print "$text{useradd2}:<b>$passwd</b>\n";
}
elsif (defined $in{txt_passwd}){
    if ($in{txt_passwd} eq $in{txt_passwdvalid}){
        $passwdvalid="ok";
        $passwd=$in{txt_passwd};
    }
    else {
        print "<h3>$text{useradd10}</h3></pre>\n";
        &passwdpart();
    }
}
else {
    print "</pre>\n";
    &passwdpart();
}
 
Last edited by a moderator:
Hast Du denn schon geprüft, ob beim normalen Durchlauf der User angelegt wird?
Wenn ja, aber eben dennoch im Webmin der Fehler auftaucht, dann stimmt wohl der Exit-Code von smbpasswd nicht.

huschi.
 
Hallo Huschi,

der Samba User wird nicht angelegt, nur der Linux User.
Siehe Eintrag im Forum Output in /tmp/logfile heute (16.04.) um 10:03.

Wie kann man während des Perl Scriptes einfach die Variable $passwd auf den
Bildschirm oder in eine Datei bekommen??
Dann würde man doch den Inhalt sehen.
 
Ach Du meinst das da:
mismatch - password unchanged.
Relativ unerklärlich...

Wie kann man während des Perl Scriptes einfach die Variable $passwd auf den Bildschirm oder in eine Datei bekommen??
Mit dem print-Befehl, wie er bereits mehrfach im Code vorkommt:
Code:
print "\$passwd=$passwd\n";

Ich würde mir noch die Ausgabe vom system-Aufruf ansehen:
Code:
perl -e '$in{txt_username}="meinUser"; $passwd="meinPW"; print system("echo -e \"$passwd\n$passwd\n\"|smbpasswd -a -s $in{txt_username} >/tmp/logfile 2>&1");'

huschi.
 
Hallo Huschi,

das war ein Treffer von dir.

Der System Aufruf "perl -e '$in{....." funktionert in Opensuse aber nicht in Ubuntu.

Vor Ausführung von "print system (echo..." kann man sich die Variablen vom User und dem Passwort ausdrucken, danach nicht mehr.

Die Variablen werden wahrscheinlich irgenwie nicht übernommen.
 
Sorry, meine Aussage von eben stimmt nicht ganz.
Hatte einen Syntax Fehler eingebaut.

Auch nach Ausführung von "print system (echo..." kann man die Variablen noch printen.

Aber wie gesagt, Samba User wird in Opensuse angelegt aber nicht in Ubuntu.
 
Fehlermeldung: gleich wie um 10:03
Ausgabe bei ubuntu 8.04 in /tmp/logfile
mismatch - password unchanged.
Unable to get new password.
 
Da kommt keine Zahl zurück, weder auf der Console noch in /tmp/logfile.
Meinst Du den return code ? Keiner zu sehen.

jden44
 

Back
Top