Aus meiner eigenen Doku... bin noch ned dazu gekommen das zu bloggen.
Wir möchten einen frei verfügbaren FTP-Server damit unser User 'mywebsite' in dern Ordner /var/www/html/mywebsite selber Dateien schreiben darf.
Dazu nutzen wir vsftp - denn der User möchte ein normales FTP Programm und kein SSH-FTP nutzen.
Außerdem möchten wir verhindern dass er mit dem FTP-Programm aus dem Ordner '/var/www/html/mywebsite' raus kommt.
Und per SSH soll er sich natürlich nicht einloggen dürfen!
Nun gut, Installieren wir vsftp:
Erstellen wir den User:
Nun in die Datei '/etc/passwd' und die Zeile mit dem User 'mywebsite' von so:
mywebsite:x:1001:1001:My Website,,,:/home/mywebsite:/bin/bash
auf so anpassen:
mywebsite:x:1001:1001:My Website,,,:/var/www/html/mywebsite:/bin/false
(Der neue Home-Ordner des Users ist damit '/var/www/html/mywebsite' die Shell '/bin/false' bedeutet dass er keine Shell bekommt wenn er sich über SSH anmeldet (also geht SSH nicht für den User!))
Und SSH-Server neu starten:
Löschen wir den alten Home-Ordner und erstellen den neuen (der im html-Verzeichnis des Apachen liegt!)
rm -rf /home/mywebsite
mkdir /var/www/html/mywebsite
chown -R mywebsite:mywebsite /var/www/html/mywebsite
Nun noch die vsftp Einstellungen anpassen.
Datei '/etc/vsftpd.conf' ändern, bzw. auskommentieren:
write_enable=YES
chroot_local_user=YES
listen=YES
listen_ipv6=NO
local_umask=022
Und einfügen:
allow_writeable_chroot=YES
-> Achtung: Am Ende der Datei muss eine Leerzeile sein, sonst started der vsftpd nicht.
--> Wenn man ihn manuell mit '/usr/sbin/vsftpd' starten will kommt die Meldung "500 OOPS: bad bool value in config file for: allow_writeable_chroot"
(Chroot bedeutet dass der User von seinem Home-Ordner nicht weiter nach oben gehen darf. Also genau das was wir aus Sicherheitsgründen wollen!
Man darf entweder auf ipv6 oder ipv4 listen, beides geht nicht.)
Diese Werte stehen so schon drin, die kann man überprüfen:
anonymous_enable=NO
local_enable=YES
ssl_enable=NO
(Wenn man hier SSL einschaltet darf man sich nicht mehr Plain verbinden - und mit der SSL Verbindung hatte ich Probleme, das ging nicht auf Anhieb!)
Und in die Datei '/etc/pam.d/vsftpd' das folgende auskommentieren, also aus:
auth required pam_shells.so
mach so:
#auth required pam_shells.so
Damit prüft vsftpd nicht ob der User eine gültige Shell in der '/etc/passwd' hat. Denn '/bin/false' würde hier ungültig geben und vsftpd nimmt den User nicht an.
Und neu starten den FTP-Server:
Jetzt sollte man sich per FTP verbinden können.
Detaileinstellung:
(FileZilla)
User: mywebsite
Pass: xxx
Port: 21
Type: Plain FTP
Und so wird man alles wieder los:
deluser mywebsite
rm -rf /var/www/html/mywebsite
apt-get purge vsftpd