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:
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:
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?
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
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?