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.


Ü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.

Kategorie: Linux

Tags: , ,

0 Kommentare

908 Aufrufe

Über mich

Ich bin Janis (aka. EurenikZ), 25 Jahre alt und komme aus der Nähe von 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.

1103 Aufrufe
Tags: , ,

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten.

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen. Sei der Erste, der diesen Beitrag bewertet!

Es tut mir Leid, dass der Beitrag für dich nicht hilfreich war!

Wie kann ich diesen Beitrag verbessern?

Hinterlasse einen Kommentar

  • Wenn das MySQL Root-Passwort vergessen wurde, kann man dieses über die Shell zurücksetzen. Stoppe zunächst den SQL-Dienst: sudo service mysql stop Starte jetzt den MySQL-Server im Safe Mode, sodass keine Authentifizierung notwendig ist. sudo mysqld_safe --skip-grant-tables --skip-syslog --skip-networking Die Shell[...]

    24.01.2023 18:04

    256
  • Wenn du das Nutzer-Passwort unter Ubuntu vergessen hast, kannst du dieses einfach über den Recovery Modus wiederherstellen. Voraussetzung ist, dass das Home-Verzeichnis nicht verschlüsselt ist. Boote in den Recovery-Modus. Halte dazu beim Start von Ubuntu die Shift-Taste gedrückt, manchmal ist[...]

    29.07.2021 8:17

    1.857
  • Wird unter Linux ein eingerichteter Cronjob ausgeführt, wird jedes Mal automatisch eine E-Mail an den User versendet, sobald die Aufgabe abgeschlossen wurde. Um dies zu deaktivieren, muss lediglich eine Zeichenfolge an den Cronjob angehängt werden. Ein Cronjob ist eine zeitgesteuerte[...]

    27.03.2021 10:47

    829
  • Wenn das MySQL Root-Passwort vergessen wurde, kann man dieses über die Shell zurücksetzen. Stoppe zunächst den SQL-Dienst: sudo service mysql stop Starte jetzt den MySQL-Server im Safe Mode, sodass keine Authentifizierung notwendig ist. sudo mysqld_safe --skip-grant-tables --skip-syslog --skip-networking Die Shell[...]

    24.01.2023 18:04

    256
  • Wenn du das Nutzer-Passwort unter Ubuntu vergessen hast, kannst du dieses einfach über den Recovery Modus wiederherstellen. Voraussetzung ist, dass das Home-Verzeichnis nicht verschlüsselt ist. Boote in den Recovery-Modus. Halte dazu beim Start von Ubuntu die Shift-Taste gedrückt, manchmal ist[...]

    29.07.2021 8:17

    1.857