• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Passwort ändern Samba / LDAP / Apache

Phillinger

Member
Hi,

ich stelle hier für unsere kleine Firma mit drei Geschäftsstellen per Web ein kleines Portal zum Arbeiten. Webserver ist der apache2. Die einzelnen User sind in einem OpenLDAP-Verzeichnis eingetragen, der Web-Login funktioniert soweit prima.

Samba greift für die Logins (security = user, nur Dateiaustausch benötigt, keine Domäne) ebenfalls auf den LDAP zurück, auch das funktioniert soweit prima. Rein zur Info hier mal die [global]-Section meiner smb.cnf:

Code:
[global]
        netbios name    = albert
        server string   = Server Albert
        workgroup       = beispiel.org

        security        = user

        domain master   = yes
        local master    = yes
        wins support    = true
        os level        = 254

        guest account   = nobody
        guest ok        = yes

        log level       = 3

        passdb backend          = ldapsam:ldap://localhost
        ldap suffix             = dc=beispiel,dc=org
        ldap admin dn           = cn=admin,dc=beispiel,dc=org
        ldap ssl                = no
        ldap passwd sync        = Yes
        ldap machine suffix     = ou=Computers
        ldap group suffix       = ou=Groups
        ldap user suffix        = ou=Users

        load printers           = no
        show add printer wizard = no
        printing                = none
        printcap name           = /dev/null
        disable spoolss         = yes
Etwas kompliziert wird es nun, wenn jemand sein Passwort ändern will. Hier behelfe ich mir mit einem kleinen Web-Formular und ein paar Zeilen PHP:
Code:
    // Passwort über smbpasswd ändern!
    // Durch passwd sync = yes in smb.conf wird sambaNTpassword UND userPassword geändert.
    // www-data darf laut /etc/sudoers nur smbpasswd per sudo ausführen

    $command    = 'echo "'.$newpasswd1.'\n'.$newpasswd2.'\n" | sudo /usr/bin/smbpasswd -s -a '.$Uid;

    // Passwortänderung durchführen
    system($command, $sysRetval);
    if($sysRetval != 0)
    {
        return -50;  // interner Systemfehler
    }

    return 0; // Erfolg

Meine Kommentare im Code erklären ja schon den Kern der Sache: "Durch passwd sync = yes in smb.conf wird sambaNTpassword UND userPassword geändert."

Das ganze funktioniert, ist aber verdammt unelegant. Außerdem ist es recht unschön, zuvor alle möglichen Sonderzeichen zu escapen oder zu verbieten, da man ja de facto ein Eingabefeld im Web hat, dass dann mit Root-Rechten auf der Bash ausgeführt wird.

Alles in allem kneifft mich diese Lösung gewaltig in der Magengrube und ich wollte mich an euch hier wenden, ob und wie man so etwas anders lösen könnte?
 

stka

Guru
Wenn du eh nur Windows-Clients hast warum dann nicht auch einen Domaincontroller, dann können die Benutzer ganz normal über windows ihr passwort ändern.
 
OP
Phillinger

Phillinger

Member
Die Clients sind ziemlich heterogen. Von Windows über Linux, Android und Apple ist alles dabei. Deshalb ist alles auf einen sehr kleinen gemeinsamen Nenner zusammen geschrumpft.
 

stka

Guru
Sorry, aber da bin ich raus, wenn es um Programmierung geht. Wenn dein Web-Interface funktioniert, warum willst du das ändern. Vielleicht postest du das Script mal im Programmierforum und fragst dort ob die da bei der Optimierung helfen kann. Das scheint mir dann mehr ein Programmierproblem zu sein. Versuchs mal.
 
OP
Phillinger

Phillinger

Member
Funktionieren tut es ja. Nur dachte ich halt, dass da vielleicht schon eine viel elegantere, fertige Methode existiert.

Ok, ich setze den Thread mal auf [gelöst] und optimiere bei Bedarf mit Hilfe der Programmier-Sektion mein Skript. Gerade beim Sonderzeichen abfischen kann man bestimmt noch optimieren.

Merci! :)
 
Oben