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
auf755
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:
Stellen Sie sicher, dass Sie hier den Modus Active (Port) verwenden:
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: