Linux & PHP: Script zum Anlegen von FTP-Benutzern und Zugängen :: ITv4.de
Linux & PHP: Script zum Anlegen von FTP-Benutzern und Zugängen
Dieser Beitrag wurde vor 3 Jahren zuletzt überarbeitet. Es kann daher durchaus vorkommen, dass Verlinkungen nicht mehr gültig sind, sich Oberflächen verändert haben oder Funktionen gar nicht mehr so funktionieren, wie hier erklärt. Es wäre daher super, wenn du in so einem Falle über die Fehler melden-Funktion Feedback geben würdest. Vielen Dank!

Besonders praktisch zum Übertragen von Daten für seine Kunden und umgekehrt ist ein FTP-Zugang. Mit folgendem PHP-Script lässt sich über eine Website ein Benutzer anlegen und die Zeit angeben, wie lange der Zugang bestehen bleiben soll. Nach einer Woche werden alle Daten per Cronjob gelöscht.

Ich übernehme keinerlei Haftung für eventuell vorhandene Sicherheitslücken, Bugs und dergleichen. Das Script samt der Umsetzung ist ein von mir erstelltes Projekt gewesen und wurde nicht im Produktivbetrieb verwendet.

Über das Script

Über die Website gibt man die Zeit an, wie lange der Zugang bestehen bleiben soll. Nach Ablauf ist das Anmelden per FTP nicht mehr möglich, der Ordner bleibt jedoch zunächst bestehen.

Eine Ausgabe gibt alle notwendigen Anmeldedaten aus, ebenfalls mit FTP-Internetadresse, welcher direkt im Windows-Explorer als Pfad angegeben werden kann. Im Verzeichnis /home/ftp/ werden per PHP-Script ein Ordner und ein dazugehöriger System-Benutzer mit den Berechtigungen auf den Ordner angelegt. Der Benutzer kann sich per FTP verbinden und Daten hochladen und herunterladen. Nach einer Woche wird der Ordner per Cronjob gelöscht. Die Anmeldung ist nur mit FTP möglich, die Shell beispielsweise funktioniert nicht.


Voraussetzungen

Debian / Ubuntu Server
Apache2
PHP 7
ProFTPD


Installation und Einrichtung von ProFTPD

Falls ProFTPD noch nicht installiert ist, wird dieses erst einmal installiert:

apt install proftpd-basic

Das Programm wird als Servermodus installiert.

Im Verzeichnis /etc/proftpd/conf.d/ wird nun eine neue Datei namens ftpuser.conf erstellt:

nano /etc/proftpd/conf.d/ftpuser.conf

Hier wird folgender Inhalt eingefügt:

<Global>
	RequireValidShell off
</Global>
UseIPv6 off
DefaultRoot ~

Anschließend wird die Datei gespeichert und der ProFTPD-Server neu gestartet:

systemctl restart proftpd.service


Vorbereitung und Einrichtung

Zunächst wird in /home/ ein neuer Ordner namens ftp erstellt, indem die Ordner später automatisch angelegt werden. Jetzt werden noch die Berechtigungen gesetzt, dafür werden Gruppe und Eigentümer für den www-data Benutzer gesetzt:

www-data [33]

Da der User www-data, welcher beim Aufruf des PHP-Scripts standardmäßig verwendet wird, keine Berechtigungen für beispielsweise useradd hat, müssen in visudo alle notwendigen Befehle für das Anlegen hier eingetragen werden, sodass er mit sudo und ohne Passwort-Eingabe des Root-Benutzers alle notwendigen Befehle ausführen darf:

visudo

Hier folgende Zeile eintragen:

www-data ALL=NOPASSWD:/usr/sbin/useradd, /usr/sbin/chpasswd, /bin/chown, /usr/sbin/usermod, /usr/bin/at, /usr/sbin/userdel, /bin/echo, /usr/bin/ftpwho

Damit FTP-Ordner, die älter als 1 Woche sind, gelöscht werden, wird ein Cronjob erstellt:

crontab -e

Hier folgende Zeile eingetragen:

0 * * * * find "/home/ftp/"* -mtime +8 -delete

Das Script

Zunächst gibt es eine index.php, welche in einen neuen Ordner namens ftpuser gehört und in welcher folgender Inhalt stehen muss:

<?php
if(isset($_SESSION['success']))
{
	echo $_SESSION['success'];
	unset($_SESSION['success']);
}else{
	?>
	<p>Zum Anlegen eines neuen FTP-Benutzers hier auswählen wie lange dieser bestehen soll, bis er samt Daten gelöscht wird.</p>
	<form id="create" method="POST" action="create.php">
		<select name="expireHours">
			<option value="1">1 Stunde</option>
			<option value="3">3 Stunden</option>
			<option value="6">6 Stunden</option>
			<option value="24">1 Tag</option>
			<option value="48">2 Tage</option>
			<option value="36">3 Tage</option>
			<option value="168">1 Woche</option>
		</select>
<button type="submit">Benutzer erstellen</button>
	</form>
	<?php
} ?>

Das PHP-Script als create.php kommt in dasselbe Verzeichnis. Unter der Zeile Einstellungen hier vornehmen müssen die jeweiligen Werte ersetzt werden:

<?php
session_start();

# Einstellungen hier vornehmen
$servername = 'FTP_SERVER_HIER_EINTRAGEN'; # Im meisten Falle die IP-Adresse des Servers
$usernamelength = 4; # Länge der Zahl des Benutzernamens, der generiert wird. Standardmäßig 4. Beispiel: ftp4269

# Ausgabe für Ablaufdatum
if($_POST['expireHours'] == 1) $expireHours = '1 Stunde';
if($_POST['expireHours'] == 3) $expireHours = '3 Stunden';
if($_POST['expireHours'] == 6) $expireHours = '6 Stunden';
if($_POST['expireHours'] == 24) $expireHours = '1 Tagen';
if($_POST['expireHours'] ==48) $expireHours = '2 Tagen';
if($_POST['expireHours'] == 36) $expireHours = '3 Tagen';
if($_POST['expireHours'] == 168) $expireHours = '1 Woche';

# Benutzername generieren
$Chars = '123456789';
$tmp = str_shuffle($Chars);
$username = substr($tmp, 0, $usernamelength);
$username = 'ftp'.str_shuffle($username);

# Passwort generieren
$Chars = 'aAbB1cCdD2eEfF3gGhH4LmMnN5pPqQ6rRsS7tTuU8vVwW9xXyYzZ';
$tmp = str_shuffle($Chars);
$passwd = substr($tmp,0,8);
$passwd = str_shuffle($passwd);

# Benutzer anlegen, Ordner erstellen, Rechte setzen, Ablaufdatum des Benutzers festlegen
shell_exec("sudo useradd '".$username."' -d /home/ftp/".$username." -s /bin/bash");
shell_exec("echo '".$username.":".$passwd."' | sudo chpasswd");
shell_exec("mkdir /home/ftp/".$username."");
shell_exec("sudo chown -c ".$username." /home/ftp/".$username."");
shell_exec("sudo echo 'userdel ".$username."' | sudo at now + ".$_POST['expireHours']." hour");

# HTML-Ausgabe erstellen
$_SESSION['success'] = '<table>
	<tr>
		<td style="padding-right: 30px;">Rechnername:</td>
		<td><b>'.$servername.'</b></td>
	</tr>
	<tr>
		<td>Benutzername:</td>
		<td><b>'.$username.'</b></td>
	</tr>
	<tr>
		<td>Passwort:</td>
		<td><b>'.$passwd.'</b></td>
	</tr>
	<tr>
		<td>Port:</td>
		<td><b>21</b></td>
	</tr>
	<tr>
		<td>Login läuft ab in:</td>
		<td><b>'.$expireHours.'</b></td>
	</tr>
</table>';
$_SESSION['success'] .= '
<input type="text" id="output" style="font-size: 150%; text-align: center;" onClick="this.select();" value="ftp://'.$username.':'.$passwd.'@'.$servername.'">';
$_SESSION['success'] .= '<a href="index.php">Neuen Benutzer anlegen</a>';

header('Location: /ftpuser/');
?>

Alternativ lassen sich beide Dateien auch als ZIP-Archiv herunterladen:

PHP-FTP-Script.zip


Bei Fragen oder Anregungen freue ich mich natürlich über eure Kommentare.


Aktualisiert
Drucken
War dieser Artikel hilfreich?
0
Hinterlasse einen Kommentar

Hast du Fragen, Probleme oder Anregungen? Hier kannst du öffentliches Feedback geben, anderen helfen und selbst um Hilfe bitten.

Folgende BBCodes sind erlaubt: [B], [I], [U], [CODE] und [MARK].

Die mit * markierten Felder sind Pflichtfelder. Möchtest du über neue Antworten auf deinen Kommentar informiert werden, kannst du deine E-Mail-Adresse hinterlegen. Diese wird nicht veröffentlicht.

Janis Mades
Janis Mades

Ich bin Janis (aka. EurenikZ), 23 Jahre alt und komme aus Frankfurt am Main. Ich habe eine abgeschlossene IHK-Ausbildung zum Fachinformatiker für Systemintegration und arbeite als Junior IT-Administrator in einem IT-Systemhaus. Neben meinem IT-Blog beschäftige ich mich viel mit diversen IT-Themen und meinen Webseiten sowie Telegram Bots und biete IT-Dienstleistungen an.

Themen
Melde dich für den Newsletter an

Mit dem kostenlosen Newsletter wirst du gelegentlich über die neuesten Tipps & Tricks per E-Mail informiert!

Ich verwende Cookies 🍪

Du kannst deine Zustimmung jederzeit widerrufen.

Verarbeitungszwecke

Ich setze Cookies ein, um meinen Blog stetig für dich zu verbessern und meine für dich kostenlosen Inhalte zu finanzieren. Dabei ist es möglich, dass Daten außerhalb des EWR verarbeitet, Nutzungsprofile gebildet und mit Daten von anderen Webseiten angereichert werden.

Indem du auf "Zustimmen und weiter" klickst, stimmst du diesen Datenverarbeitungen freiwillig zu. Mehr Informationen findest du in der Datenschutzerklärung. Dort kannst du auch jederzeit deine Entscheidung zu Cookies widerrufen.

Ich übernehme keinerlei Haftung auf die Richtigkeit meiner Beiträge und daraus folgenden Schäden.

Oder

Melde dich mit deinem EZ-Account an und besuche alle meine Webseiten werbefrei und ohne Tracking. Der EZ-Account ist kostenlos.



Impressum