Einrichten eines FTP-Servers für Ihre 2k+ (WQHD)-Kamera mit Docker

Update: Dieses Tutorial funktioniert nur mit Aktiven (PORT Mode) Uploads. Für den Passiven (PASV Modus) lesen Sie bitte unser Tutorial Einrichten eines passiven FTP-Servers für Ihre 2k+ (WQHD)-Kamera mit Docker

Update: Erweitertes Tutorial für das Einrichten eines gesicherten FTP-Servers für Ihre 2k+ (WQHD)-Kamera mit Docker über das Hinzufügen der TLS Verschlüsselung.

Q: Ich möchte den FTP-Dienst meiner Kamera nutzen, um Alarmaufzeichnungen und Schnappschussserien auf meinen Linux-Server (Raspberry Pi) hochzuladen.

A: Der einfachste Weg wäre, Ihren Internet-Router als FTP-Server zu verwenden. Wenn Sie einen Linux Server wie z.B. einen Raspberry Pi verwenden möchten, empfehlen wir den sFTP Dienstes anstelle von FTP oder FTPS. Aber natürlich können Sie stattdessen auch Ihren eigenen FTP-Server einrichten. Ich würde empfehlen, ein "vsftpd"-Docker-Image für diese Aufgabe zu erstellen.

Vorbereitung des Docker Images

Beginnen Sie damit, ein Arbeitsverzeichnis und Ihr Dockerfile zu erstellen, z.B. :

mkdir -p /opt/vsftpd/ftpuser && cd /opt/vsftpd
nano Dockerfile

Und fügen Sie den folgenden Inhalt hinzu:

# Dockerfile for vsftpd on CentOS7
FROM centos:7

MAINTAINER m.polinowski@instar.com

RUN yum -y update; yum -y install which vsftpd net-tools vsftpd-sysvinit; yum clean all

COPY vusers.txt /etc/vsftpd/
RUN db_load -T -t hash -f /etc/vsftpd/vusers.txt /etc/vsftpd/vsftpd-virtual-user.db; rm -v /etc/vsftpd/vusers.txt; \
	chmod 600 /etc/vsftpd/vsftpd-virtual-user.db
COPY vsftpd.conf /etc/vsftpd/
COPY vsftpd.virtual /etc/pam.d/
RUN mkdir -p /home/vftp/ftpuser; chown -R ftp:ftp /home/vftp

EXPOSE 20 21

CMD ["/usr/sbin/vsftpd","-obackground=NO"]

Dieses Dockerfile wird CentOS als Basis-Image nehmen - dies kann durch jede beliebige Variante von Enterprise Linux ersetzt werden. Im nächsten Schritt wird der Dienst vsftpd installiert und ein FTP-Benutzerkonto für uns erstellt. Danach müssen wir die folgenden Konfigurationsdateien in das Image kopieren - alle müssen in demselben Verzeichnis erstellt werden, in dem wir unsere Dockerfile abgelegt haben:

FTP Benutzer Login

vusers.txt

ftpuser
mypassword

Dies ist der Benutzer, den wir für die Verbindung zum FTP-Server verwenden müssen - ändern Sie sowohl den Benutzernamen als auch das Passwort nach Ihren Bedürfnissen.

FTP Benutzer Konfiguration

vsftpd.virtual

#%PAM-1.0
auth       required     pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
account    required     pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
session    required     pam_loginuid.so

Server Konfiguration

vsftpd.conf

anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
local_umask=022
pam_service_name=vsftpd.virtual
guest_enable=YES
user_sub_token=$USER
local_root=/home/vftp/$USER
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

Beginnen wir mit einer sehr einfachen Konfiguration.

Starten des Docker Containers

Bauen des Images

Mit diesen 4 Dateien sind wir nun bereit, unser Docker-Image zu erstellen:

docker build -t vsftpd .

Exportieren des Images (Optional)

Damit haben wir unser Image erstellt und es vsftpd genannt. Wir können dieses Image exportieren und es dort platzieren, wo wir es brauchen - überspringen Sie diesen Schritt, wenn Sie bereits auf dem System sind, das Sie für Ihren Server verwenden wollen:

docker save -o vsftpd.docker vsftpd:latest

Kopieren Sie die exportierte Datei vsftpd.docker auf Ihren Offline-PC und importieren Sie sie:

docker load -i vsftpd.docker

Ausführen des Containers

Stellen Sie sicher, dass das FTP-Benutzerverzeichnis existiert und von Ihrem Docker-Benutzer beschrieben werden kann:

mkdir -p /opt/vsftpd/ftpuser
chmod 755 -R /opt/vsftpd/*

Stellen Sie sicher, dass das Home-Verzeichnis /opt/vsftpd/ftpuser auf 755 gesetzt ist, um den FTP-Schreibfehler ftp 550 Create directory operation failed. oder 553 Could not create file. zu vermeiden

Und starten Sie den Container mit dem folgenden Befehl:

docker run -d \
    --name vsftpd \
    --net=host \
    --privileged \
    --rm \
    -v /opt/vsftpd/ftpuser/:/home/vftp/ftpuser/ \
    vsftpd:latest

Hinweis: Wenn Sie das Image lokal erstellen, wird es vsftpd:latest heißen. Wenn Sie es importieren, wird es localhost/vsftpd:latest heißen und Sie müssen den Namen unten ändern.

Überprüfen Sie, ob der Server betriebsbereit ist

Wir können nun überprüfen, ob unser Server aktiv ist, zum Beispiel mit dem lftp-Client (apt install lftp):

lftp -d -u ftpuser 192.168.2.111
Password: mypassword
---- Resolving host address...
---- 1 address found: 192.168.2.111

Melden Sie sich mit der IP-Adresse Ihres FTP-Servers, z.B. 192.168.2.111, und Ihrem FTP-Login, z.B. ftpuser/mypassword, an. Verwenden Sie den Befehl ls, um Details über Ihre Verbindung zu erfahren:

lftp ftpuser@192.168.2.111:~> ls
---- Connecting to 192.168.2.111 (192.168.2.111) port 21
<--- 220 (vsFTPd 3.0.2)
---> FEAT
<--- 211-Features:
<---  EPRT
<---  EPSV
<---  MDTM
<---  PASV
<---  REST STREAM
<---  SIZE
<---  TVFS
<---  UTF8
<--- 211 End
---> AUTH TLS
<--- 530 Please login with USER and PASS.
---> OPTS UTF8 ON
<--- 200 Always in UTF8 mode.
---> USER ftpuser
<--- 331 Please specify the password.
---> PASS XXXX
<--- 230 Login successful.
---> PWD
<--- 257 "/"
---> PASV
<--- 227 Entering Passive Mode (192,168,2,111,47,12).
---- Connecting data socket to (192.168.2.111) port 12044
---- Data connection established
---> LIST
<--- 150 Here comes the directory listing.
---- Got EOF on data connection
---- Closing data socket
-rwxr-xr-x    1 ftp      ftp        194654 Dec 29 07:16 T21122908162800.jpg
<--- 226 Directory send OK.
---- Closing idle connection
---> QUIT
<--- 221 Goodbye.
---- Closing control socket

Oder verwenden Sie Filezilla, um eine grafische Oberfläche nutzen zu können:

Einrichten eines FTP-Servers für Ihre 2k+ (WQHD)-Kamera mit Docker

Stellen Sie sicher, dass Sie hier den Modus Active (Port) verwenden:

Einrichten eines FTP-Servers für Ihre 2k+ (WQHD)-Kamera mit Docker

Versuchen Sie, eine Verbindung herzustellen und einen Ordner innerhalb des Home-Verzeichnisses zu erstellen. Wenn Sie ftp 550 Create directory operation failed. sehen, müssen Sie chmod 755 /opt/vsftpd/ftpuser erneut ausführen, um sicherzustellen, dass Sie Schreibrechte haben.

Connecting an INSTAR IP Camera

Stellen Sie sicher, dass der Mode auf PORT eingestellt ist:

Full HD Kameras

Einrichten eines FTP-Servers für Ihre 2k+ (WQHD)-Kamera mit Docker

WQHD Kameras

Einrichten eines FTP-Servers für Ihre 2k+ (WQHD)-Kamera mit Docker