FTP-User per PHP anlegen

  • Schönen Abend,


    hat jemand eine Ahnung, warum das hier nicht funktioniert?


    Code
    $output = shell_exec("ftpasswd --passwd $_POST[ftp] --name $_POST[domain] --uid 1001 --home /var/www/gallery/$_POST[domain] --shell /bin/false");


    Es soll eigentlich einen FTP-User anlegen, aber das will nicht hinhauen. Wenn ich den $output der shell_exec anzeigen lasse, passiert gar nichts.

  • Ich kann dir zwar nicht bei deinem Problem helfen, allerdings hoffe ich, dass du die beiden POST-Daten zuvor überprüfst da ansonsten leicht auch andere Befehle ausgeführt werden können...

  • PHP
    $output = shell_exec("ftpasswd --passwd {$_POST['ftp']} --name {$_POST['domain']} --uid 1001 --home /var/www/gallery/{$_POST['domain']} --shell /bin/false");


    Zudem musst du natürlich noch Require Valid Shell auf 0 bzw. false/no setzen.

  • Nimm exec() und lass dir einmal $return_var ausgeben. Vermutlich hat der Webserver keinen Zugriff auf den Befehl, was meiner Meinung nach auch so sein/bleiben sollte. Speichere die anzulegenden User lieber in einer DB/Textdatei und lass sie von einem Cronjob mit einem PHP-CLI Script alle paar Minuten abarbeiten. Ist letztendlich viel sicherer.



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Zitat

    Speichere die anzulegenden User lieber in einer DB/Textdatei und lass sie von einem Cronjob mit einem PHP-CLI Script alle paar Minuten abarbeiten. Ist letztendlich viel sicherer.

    Das hört sich ja interessant an. Könntest du mir da vielleicht ein paar Beispiele geben? Wie muss die Textdatei aussehen und wie kann der Cronjob diese abarbeiten?


    €dit: Gut, habe jetzt ein wenig gebastelt.


    Die PHP-Datei legt jetzt Zeilen mit folgendem Syntax an:


    Zitat

    username|passwort|email

    Die EMail ist nur dafür da, die User zu benachrichtigen, wenn der FTP-Account angelegt wurde.


    Außerdem habe ich schonmal an der .php-Datei für den Cronjob gearbeitet:


    Code
    #!/usr/bin/php -q 
    $file = fopen("/var/www/workdir/creategallery.txt", "a");
    list($username, $password, $email) = explode("|", $file);
    shell_exec("ftpasswd --passwd {password} --name {username} --uid 1001 --home /var/www/gallery/{username} --shell /bin/false");  
    fclose($file);
    unlink($file);

    Dieser Code liest aber so nur eine Zeile und sonst nichts. Warum? Und wie kann ich es anstellen, dass jede ID (--uid) nur einmal benutzt wird?

  • Kleines Update -


    Cronjob läuft, alles funktioniert wunderbar, nur die User werden nicht angelegt. Jemand ne Ahnung warum?


  • Hallo,
    Wieso machst du das eigentlich so umständlich, insterliere dir doch einfach einen FTP-Deamon mit Mysql?


    Edit: Unter welchem Benutzer wird der Cronjob ausgeführt?

  • Zitat von Seb;19412

    Hallo,
    Wieso machst du das eigentlich so umständlich, insterliere dir doch einfach einen FTP-Deamon mit Mysql?


    Es geht dir doch um proftpd (welcher MySQL kann und hier vielleicht sogar MySQL spricht).

    "Security is like an onion - the more you dig in the more you want to cry"

  • *seufz* So schwer..


    Zitat


    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; INSERT INTO ftpuser (username,password,homedir,shell) VALUES (xxx,xxx' at line 1

  • Das Problem ist, dass du bei mysql_query() immer nur ein SQL-Statement ausführen kannst. Dh entweder so:

    PHP
    mysql_query("USE ftp;");
    $result = mysql_query("INSERT INTO ftpuser
     (username,password,homedir,shell)
    VALUES
    ('$username', '$password', '/var/www/gallery/$username', '/bin/bash');");

    oder so

    PHP
    $result = mysql_query("INSERT INTO ftp.ftpuser
     (username,password,homedir,shell)
    VALUES
    ('$username', '$password', '/var/www/gallery/$username', '/bin/bash');");


    //edit
    Außerdem sehe ich gerade, dass $username und $password nicht unter Anführungszeichen stehen. Das geht nur bei Zahlen...

  • OK,


    fast alles funktioniert jetzt. Die User werden angelegt, in die MySQL-Tabelle geschrieben, proFTPd erkennt diese und man kann sich problemslos verbinden.


    Einziges Problem in meinem automatischen Anlegeprozess ist dieser Code:


    Insbesondere das hier:


    Code
    ENCRYPT($password)


    Beim Verarbeiten der Daten kommt es nämlich dann zu folgender Fehlermeldung:


    Zitat

    Invalid query: Unknown column 'testpasswort' in 'field list'


    Setze ich allerdings statt der Variable normalen Text ein, funktioniert alles wunderbar.


    Weiß jemand Rat?

  • $password = md5($password);

    Logic will take you from A to B. Imagination will take you everywhere.(A.Einstein)
    Nur wer sein Ziel kennt findet auch den Weg!

  • Zitat von Mo3;19475

    Setze ich allerdings statt der Variable normalen Text ein, funktioniert alles wunderbar.


    Zitat von Matzi;19465

    Außerdem sehe ich gerade, dass $username und $password nicht unter Anführungszeichen stehen. Das geht nur bei Zahlen...


    Wurde doch schon mehrmals erwähnt ;)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)