Tips en Trucs 2018

Pure-FTP

Pure-FTPd is een lichtgewicht FTP server gebaseerd op Troll-FTPd waarvan de ontwikkeling startte in 2001. Pure-FTPd werkt op Unix achtige besturingssystemen zoals Linux, BSD, Solaris en HP-UX. Pure-FTPd ondersteunt virtuele domeinen, chroot, virtuele gebruikers, TLS/SSL, virtuele quota, enz.

Pure-FTPd installeren en configureren

Pure-FTPd installeer je in openSUSE 42.3 met de volgende opdracht:

dany@pindabook:~> sudo zypper in pure-ftpd openssl
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
'openssl' is al geïnstalleerd.
Geen updatekandidaat voor bijwerken van 'openssl-1.0.2j-16.1.x86_64'. De hoogst beschikbare versie is al geïnstalleerd.
Pakketafhankelijkheden oplossen...

Het volgende NIEUWE pakket zal worden geïnstalleerd:
  pure-ftpd

1 nieuw te installeren pakket.
Totale downloadgrootte: 225,6 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 563,2 KiB worden gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j): 
pakket pure-ftpd-1.0.46-1.1.x86_64 wordt opgehaald                                      (1/1), 225,6 KiB (563,2 KiB uitgepakt)
Ophalen: pure-ftpd-1.0.46-1.1.x86_64.rpm .............................................................................[gereed]
Controleren op conflicten tussen bestanden: ..........................................................................[gereed]
(1/1) Installeren van: pure-ftpd-1.0.46-1.1.x86_64 ...................................................................[gereed]

Tegelijkertijd heb ik voor de TLS/SSL configuratie (zie verder) het openssl pakket geïnstalleerd. Wat zoals je kunt zien in de uitvoer op mijn systeem niet eens nodig was, openssl was reeds geïnstalleerd.

Pure-FTPd werkt met gebruikers die je best groepeert. We maken daarvoor een nieuwe groep aan (ftpgroup) en voegen er de hoofdgebruiker (ftpuser) van Pure FTP aan toe:

dany@pindabook:~> sudo groupadd ftpgroup
dany@pindabook:~> sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser

Via het het configuratiebestand /etc/pure-ftpd/pure-ftpd.conf kan je Pure FTPd instellen:

dany@pindabook:~> sudo joe /etc/pure-ftpd/pure-ftpd.conf

Pas op regel 81 de instelling NoAnonymous aan naar yes waardoor geen anonieme gebruikers meer kunnen aanmelden.

NoAnonymous                  yes

Verwijder op regel 129 het commentaarteken (hekje) vooraan te regel. Pure-FTPd ondersteunt MySQL, PostgreSQL en LDAP om gebruikers op te slaan. Wij gebruiken de in Pure-FTPd ingebouwde PureDB opslagmethode.

PureDB                       /etc/pure-ftpd/pureftpd.pdb

Controleer op regel 140 of authentificatie van gebruikers via PAM verloopt:

PAMAuthentication            yes

Sla de aanpassingen op en verlaat uw teksteditor (in joe druk je daarvoor Ctrl+k gevolgd door x).

TLS/SSL voor Pure-FTPd configureren

Maak een nieuw getekend certificaatbestand (/etc/ssl/private) aan met het volgende openssl opdracht:

dany@pindabook:~> sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem -days 365
[sudo] wachtwoord voor root: 
Generating a 2048 bit RSA private key
.......................................................................................................................+++
............+++
writing new private key to '/etc/ssl/private/pure-ftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BE
State or Province Name (full name) [Some-State]:West Vlaanderen
Locality Name (eg, city) []:Brugge
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PindaNet
Organizational Unit Name (eg, section) []:Linux
Common Name (e.g. server FQDN or YOUR name) []:Dany Pinoy
Email Address []:dany.pinoy@pindanet.be

Pas de rechten van het certificaatbestand aan zodat alleen jij (root) het certificaat kan gebruiken.

dany@pindabook:~> sudo chmod 600 /etc/ssl/private/pure-ftpd.pem
dany@pindabook:~> sudo ls -l /etc/ssl/private/pure-ftpd.pem
-rw------- 1 root root 3156 13 jan 14:30 /etc/ssl/private/pure-ftpd.pem

Om TLS in Pure-FTPd te activeren en in te stellen, open je opnieuw het configuratiebestand in uw teksteditor:

dany@pindabook:~> sudo joe /etc/pure-ftpd/pure-ftpd.conf

Activeer (verwijder commentaarteken) TLS op regel 421.

TLS                          1

Activeer (verwijder hekje) regel 431 en voeg enkele opties toe om nog sterker te beveiligen.

TLSCipherSuite               HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3

Activeer regel 437 om het aangemaakte certificaatbestand te gebruiken.

CertFile                     /etc/ssl/private/pure-ftpd.pem

Sla de aanpassingen op en verlaat uw teksteditor (in joe druk je daarvoor Ctrl+k gevolgd door x).

Virtuele gebruikers toevoegen

Pure-FTPd laat toe om in plaats van echte systeem (Linux) gebruikers te gebruiken, virtuele gebruikers aan te maken en te gebruiken. We gebruiken het eerder ingestelde en ingebouwde PureDB authentificatiesysteem. Daarvoor start je Pure-FTPd met de opdracht:

dany@pindabook:~> sudo systemctl start pure-ftpd

Met de pure-pw opdracht kan je nieuwe virtuele gebruikers aanmaken. We creëren de gebruiker pindanet met een map /srv/ftp/pindanet die als ftp persoonlijke map wordt gebruikt. De FTP pindanet gebruiker wordt in deze map opgesloten (chroot) waardoor deze geen toegang heeft tot andere systeemmappen.

dany@pindabook:~> sudo pure-pw useradd pindanet -u ftpuser -d /srv/ftp/pindanet
Password: 
Enter it again:

De map waarin de ftp gebruiker pindanet zal werken, maak je aan met de opdracht:

dany@pindabook:~> sudo mkdir -p /srv/ftp/pindanet

We zorgen dat de hoofdgebruiker van Pure-FTPd toegang heeft tot deze map door ftpuser eigenaar van deze map te maken:

dany@pindabook:~> sudo chown -R ftpuser.ftpgroup /srv/ftp/pindanet

Daarna slaan we alle aanpassingen in de database op:

dany@pindabook:~> sudo pure-pw mkdb

Eerste test

Klaar voor een eerste test. Om alle aanpassingen te activeren, herstart je Pure-FTPd met de opdracht:

dany@pindabook:~> sudo systemctl restart pure-ftpd

Om Pure-FTPd bij elke systeemstart automatisch te laten starten, voer je de volgende opdracht uit:

dany@pindabook:~> sudo systemctl enable pure-ftpd

De FTP server is nu enkel toegankelijk vanaf de computer waarop Pure-FTPd gestart is. Met de ftp opdracht kan je een FTP server benaderen:

dany@pindabook:~> ftp
ftp> open localhost
Trying ::1:21 ...
Connected to localhost.
220-Welcome to Pure-FTPd.
220-You are user number 1 of 10 allowed.
220-Local time is now 16:41. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 15 minutes of inactivity.
Name (localhost:dany): pindanet
331 User pindanet OK. Password required
Password: 
230 OK. Current directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put desktop.jpeg desktop-op-ftp-server.jpeg
local: desktop.jpeg remote: desktop-op-ftp-server.jpeg
229 Extended Passive mode OK (|||30011|)
150 Accepted data connection
100% |*********************************************************************************|   223 KiB  279.34 MiB/s    00:00 ETA
226-File successfully transferred
226 0.001 seconds (measured here), 170.98 Mbytes per second
228769 bytes sent in 00:00 (146.42 MiB/s)
ftp> ls
229 Extended Passive mode OK (|||30081|)
150 Accepted data connection
drwxr-xr-x    2 1031       ftpgroup         4096 Jan 13 16:43 .
drwxr-xr-x    2 1031       ftpgroup         4096 Jan 13 16:43 ..
-rw-r--r--    1 1031       ftpgroup       228769 Jan 13 16:43 desktop-op-ftp-server.jpeg
226-Options: -a -l 
226 3 matches total
ftp> exit
221-Goodbye. You uploaded 224 and downloaded 0 kbytes.
221 Logout.

Na het starten van de ftp opdracht verschijnt een ftp prompt (ftp>). Met de open ftp opdracht maak je verbinding met de FTP server op de computer met de naam localhost (de computer waarop je de opdracht uitvoert). Daarna wordt de gebruikersnaam en bijhorende wachtwoord gevraagd. Met de put ftp opdracht upload ik het bestand desktop.jpeg uit mijn huidige map naar de FTP server naar de map van de ftp pindanet gebruiker. Dit bestand wordt in deze map opgeslagen met de naam desktop-op-ftp-server.jpeg. Met de ls ftp opdracht bekijk je de inhoud van de huidige map op de FTP server. Met exit beëindig je de ftp opdrachtensessie.

Firewall instellen

Om vanaf een andere computer in het thuisnetwerk toegang tot uw FTP server te krijgen, moet je langs de firewall van openSUSE 42.3. M.a.w. de firewall moet de FTP netwerkpakketten voor de FTP server doorlaten. Daarvoor pas je met een teksteditor het configuratiebestand van de firewall aan:

dany@pindabook:~> sudo joe /etc/sysconfig/SuSEfirewall2

De ftp poort en de poorten 30000 tot en met 30100 (Passieve FTP) openen we door op regel 253 de FW_SERVICES_EXT_TCP aan te passen:

FW_SERVICES_EXT_TCP="30000:30100 ftp"

Sla de aanpassingen op en activeer deze door de firewall te herstarten:

dany@pindabook:~> sudo systemctl restart SuSEfirewall2

Nu is uw FTP server vanaf elk apparaat in uw thuisnetwerk bereikbaar. Je moet daarvoor wel het IP adres of de netwerknaam van uw FTP server kennen. Het IP adres van uw FTP server vraag je op met de opdracht:

dany@pindabook:~> ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether ac:7b:a1:42:e0:5f brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:b6:6b:4f:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.5/24 brd 192.168.1.255 scope global dynamic eth0
       valid_lft 6880sec preferred_lft 6880sec
    inet6 fe80::250:b6ff:fe6b:4f28/64 scope link 
       valid_lft forever preferred_lft forever

In ons voorbeeld heeft de FTP server het IP adres 192.168.1.5. De volgende test kan je dan op een andere Linux computer in uw thuisnetwerk uitvoeren:

dany@main:~> ftp
ftp> open 192.168.1.5
Connected to 192.168.1.5.
220-Welcome to Pure-FTPd.
220-You are user number 1 of 10 allowed.
220-Local time is now 18:07. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (192.168.1.5:dany): pindanet
331 User pindanet OK. Password required
Password: 
230 OK. Current directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put Docker.pdf Docker-op-ftp-server.pdf
local: Docker.pdf remote: Docker-op-ftp-server.pdf
229 Extended Passive mode OK (|||30080|)
150 Accepted data connection
100% |*********************************************************************************| 62468 KiB   45.04 MiB/s    00:00 ETA
226-File successfully transferred
226 1.355 seconds (measured here), 45.04 Mbytes per second
63967874 bytes sent in 00:01 (45.03 MiB/s)
ftp> ls
229 Extended Passive mode OK (|||30078|)
150 Accepted data connection
drwxr-xr-x    2 1031       ftpgroup         4096 Jan 13 18:08 .
drwxr-xr-x    2 1031       ftpgroup         4096 Jan 13 18:08 ..
-rw-r--r--    1 1031       ftpgroup     63967874 Jan 13 18:08 Docker-op-ftp-server.pdf
-rw-r--r--    1 1031       ftpgroup       228769 Jan 13 16:43 desktop-op-ftp-server.jpeg
226-Options: -a -l 
226 4 matches total
ftp> exit
221-Goodbye. You uploaded 62469 and downloaded 0 kbytes.
221 Logout.

Daarbij heb ik het bestand Docker.pdf naar de FTP-server geüpload. Docker.pdf moet daarvoor wel in de huidige map van uw computer staan. M.a.w. als je zelf de test uitvoert, upload dan een bestand dat bij jouw op de computer aanwezig is.

FTP standaard en grafische omgeving

Daar FTP een standaard is, wordt het door heel veel apparaten standaard ondersteunt, waaronder grafische omgevingen zoals KDE en Gnome, andere besturingssystemen zoals Windows en macOS, en bijna alle bestandsbeheerders (ook op Android en iOS). Bij Dolphin (de KDE bestandsbeheerder) typ je bovenaan in de adresbalk ftp://192.168.1.5 (het IP adres mag je vanzelfsprekend vervangen door de netwerknaam van de FTP server). Na het drukken op de Return toets verschijnt een Authenticatiedialoog venster waarin je de Gebruikersnaam en bijhorende Wachtwoord moet ingeven.
FTP Authentificatie

Na het klikken op de knop OK wordt de inhoud van de persoonlijke map van de pindanet ftp gebruiker op de FTP server zichtbaar. Je kunt deze map op de FTP server nu beheren, juist alsof je het een lokale map is.
Dolphin FTP bestandsbeheerder

Werken met netwerknamen

Met IP adressen werken is niet handig, in thuisnetwerken veranderen die regelmatig. Wil je met netwerknamen werken, raadpleeg dan de tips Avahi Zeroconf netwerk en SSHFS automatisch koppelen bij gebruik.