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