Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| wiki:dienste:vsftpd [2011/02/23 12:37] – angelegt wikiadmin | wiki:dienste:vsftpd [2015/01/13 11:19] (aktuell) – [Bug bei bei chroot] wikiadmin | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ~~BARCODE~class=barcode_right~size=S~~ | ||
| + | |||
| + | ====== Verschlüsseltes FTP ====== | ||
| + | |||
| + | |||
| + | Da FTP ein unsicheres Protokoll ist, um Daten zu übertragen, | ||
| + | |||
| + | |||
| ===== Installation ===== | ===== Installation ===== | ||
| Zeile 11: | Zeile 19: | ||
| Bei der Zertifikatserstellung werden folgende Fragen getstellt. Zur Identifikation ist es nötig, die richtigen Dinge einzutragen | Bei der Zertifikatserstellung werden folgende Fragen getstellt. Zur Identifikation ist es nötig, die richtigen Dinge einzutragen | ||
| - | <html>Country Name (2 letter code) [GB]:& | + | <file> |
| - | State or Province Name (full name) [Berkshire]: | + | Country Name (2 letter code) [GB]: Land (z.B. DE) |
| - | | + | State or Province Name (full name) [Berkshire]: |
| - | | + | Locality Name (eg, city) [Newbury]: Stadt (z.B. München) |
| - | | + | Organization Name (eg, company) [My Company Ltd]: eigener Name |
| - | | + | Organizational Unit Name (eg, section) []: Bezeichnung des Dienstes (z.B. FTP-Server) |
| - | Email Address []:& | + | Common Name (eg, your name or your server' |
| - | </html> | + | Email Address []: eMail-Adresse |
| + | </file> | ||
| Datei mit Accounts erstellen, die sich nicht am FTP anmelden können | Datei mit Accounts erstellen, die sich nicht am FTP anmelden können | ||
| Zeile 28: | Zeile 37: | ||
| < | < | ||
| - | ===== Konfigurationsdateien ===== | + | ===== Konfigurationsdateien ===== |
| / | / | ||
| - | <filebash | + | <file bash vsftpd.conf> |
| # daemon started from an initscript. | # daemon started from an initscript. | ||
| listen=YES | listen=YES | ||
| Zeile 72: | Zeile 81: | ||
| data_connection_timeout=120 | data_connection_timeout=120 | ||
| # You may fully customise the login banner string: | # You may fully customise the login banner string: | ||
| - | ftpd_banner=Welcome to da-checka' | + | ftpd_banner="Welcome to da-checka' |
| chroot_local_user=YES | chroot_local_user=YES | ||
| # This option should be the name of a directory which is empty. | # This option should be the name of a directory which is empty. | ||
| Zeile 109: | Zeile 118: | ||
| </ | </ | ||
| - | ===== Skript zur erstellung eines FTP-Benutzers | + | ====== Sicherheitseinstellung ====== |
| - | In / | + | Da Filezilla ab Version 3.5.3 die Cipher-Suite verändert hat, muss man die Konfiguration von vsftpd anpassen. Hierzu einfach folgende Zeile an die Konfigurtion anhängen |
| - | <file bash ftpuser_create> | + | |
| - | # Kleines Programm zum erstellen eines ftp-Nutzers mit mount des Verzeichnisses fuer_alle | + | |
| - | + | ||
| - | # Prüfen, ob das Script als root aufgerufen wurde | + | |
| - | if [ `id -u` -ne " | + | |
| - | then | + | |
| - | echo "You must be root" | + | |
| - | exit 1 | + | |
| - | fi | + | |
| - | + | ||
| - | if [ $# = " | + | |
| - | then | + | |
| - | user=$1 | + | |
| - | # PrÃüft, ob der eingegeben User schon existiert | + | |
| - | if ! id $user>/ | + | |
| - | then | + | |
| - | #User wird angelegt | + | |
| - | if sudo useradd -d /home/$user -m -s /bin/false $user | + | |
| - | then | + | |
| - | echo " | + | |
| - | # Passwort generieren | + | |
| - | password=`cat / | + | |
| - | # Abfrage, ob generiertes Passwort verwendet werden soll | + | |
| - | echo -e " | + | |
| - | read fragepasswd | + | |
| - | case $fragepasswd in | + | |
| - | j|J|"" | + | |
| - | printf " | + | |
| - | sudo passwd $user < $passwordfile > /dev/null 2>& | + | |
| - | sudo rm $passwordfile | + | |
| - | ;; | + | |
| - | *) | + | |
| - | sudo passwd $user | + | |
| - | esac | + | |
| - | + | ||
| - | # Abfrage, ob Passwort gespeichert werden soll | + | |
| - | echo -e " | + | |
| - | read fragespeicher | + | |
| - | case $fragespeicher in | + | |
| - | j|J|"" | + | |
| - | printf " | + | |
| - | ;; | + | |
| - | *) | + | |
| - | esac | + | |
| - | # Verzeichnis wird ür den Mountpoint angelegt | + | <file bash vsftpd.conf> |
| - | sudo mkdir / | + | ssl_ciphers=HIGH |
| - | # Anlegen des oeffentl. Verzeichnisses fuer Apache | + | |
| - | sudo mkdir / | + | |
| - | sudo chown $user.$user / | + | |
| - | # Eintrag in die fstab wird geschrieben, | + | |
| - | # damit automatisch gemountet wird | + | |
| - | echo -e "/ | + | |
| - | # Mountpoint einhängen | + | |
| - | /bin/mount -a | + | |
| - | fi | + | |
| - | else | + | |
| - | echo -e " | + | |
| - | fi | + | |
| - | else | + | |
| - | echo -e " | + | |
| - | fi | + | |
| </ | </ | ||
| - | ===== Script zum löschen eines FTP-Benutzers | + | ====== Skripte für FTP ====== |
| - | in / | + | |
| - | <file bash ftpuser_del> | + | Das Leben ist zu kurz zum tippen, deshalb hier ein paar Scripte, um mir ein paar Arbeiten zu erleichtern |
| - | #!/bin/bash | + | |
| - | user=$1 | + | * Skript zur erstellung eines FTP-Benutzers findet man [[wiki: |
| + | * Script zum löschen eines FTP-Benutzers findet man [[wiki: | ||
| + | * ftpwho für vsftpd findet man [[wiki: | ||
| - | #Pruefen, ob das Progamm als root gestartet wurde | + | ====== Bug bei bei chroot ====== |
| - | if [ ! `id -u` = " | + | |
| - | then | + | |
| - | echo "You must be root" | + | |
| - | exit 1 | + | |
| - | fi | + | |
| - | #Pruefen, ob Benutzer existiert | ||
| - | if ! id -u $user>/ | ||
| - | then | ||
| - | echo -e "$user existiert nicht\nProgramm beendet" | ||
| - | exit 1 | ||
| - | fi | ||
| - | #Mountpunkt umounten, damit beim loeschen nicht fuer_alle geloescht | + | In der Version 2.3.5, die bei ubuntu und Debian standardmäßig ausgeliefert |
| - | if ! umount | + | |
| - | then | + | |
| - | echo -e " | + | |
| - | exit 1 | + | |
| - | fi | + | |
| - | # | + | Dieser ist bekannt und wurde in der Version 3 behoben. Leider |
| - | if ! userdel -r $user | + | |
| - | then | + | |
| - | echo -e " | + | |
| - | exit 1 | + | |
| - | fi | + | |
| - | #Eintrag fuer den Nutzer aus der fstab loeschen | + | Zum fixen den Bugs eignet sich folgende Methoden |
| - | cp /etc/fstab / | + | |
| - | if ! grep -v "/ | + | |
| - | then | + | |
| - | echo -e " | + | |
| - | exit 1 | + | |
| - | fi | + | |
| - | mv /etc/fstab.neu /etc/fstab | + | < |
| + | echo "deb http:// | ||
| + | aptitude update | ||
| + | aptitude install -t wheezy-updates debian-cyconet-archive-keyring vsftpd | ||
| + | echo " | ||
| + | / | ||
| </ | </ | ||
| - | ===== ftpwho für vsftpd ===== | + | Und alles läuft wieder wie gewünscht |
| - | ftpwho-Skript nach /usr/local/bin schreiben | + | Ausführliche Anleitung findet man auf der Seite [[http://ftp.cyconet.org/instructions]]. |
| - | <file bash ftpwho> | + | ====== |
| - | # | + | |
| - | + | | |
| - | #Funktion, um eine Linie zu zeichnen | + | * [[http:// |
| - | function linie(){ | + | * [[http:// |
| - | echo " | + | |
| - | } | + | |
| - | + | ||
| - | #setzen des Seperators, damit das Array befüllt werden kann | + | |
| - | IFS=$' | + | |
| - | + | ||
| - | #Einlesen der Daten in ein Array " | + | |
| - | Daten=( `ps -C vsftpd -o user, | + | |
| - | + | ||
| - | # Zeichnen der ersten Tabellenspalte | + | |
| - | echo -e " | + | |
| - | linie | + | |
| - | printf "| %-15s| %-5s | %-17s| %-10s| %-60s|\n" | + | |
| - | linie | + | |
| - | #echo " | + | |
| - | for (( i=0 ; $i< | + | |
| - | do | + | |
| - | + | ||
| - | IFS=$' ' | + | |
| - | #Befüllen des Zweiten Arrays, das für jede Zeile zuständig ist | + | |
| - | Zeile=( ${Daten[$i]} ) | + | |
| - | + | ||
| - | + | ||
| - | # | + | |
| - | # for (( zaehler=0 ; $zaehler< | + | |
| - | # do | + | |
| - | # echo Zeile $zaehler: ${Zeile[$zaehler]} | + | |
| - | # | + | |
| - | + | ||
| - | + | ||
| - | #Wenn nicht der Username sondern die UID ausgegeben wird, wird dies behoben | + | |
| - | case ${Zeile[0]:0:1} in | + | |
| - | | + | |
| - | user=`grep :${Zeile[0]}: /etc/passwd | cut -d":" | + | |
| - | ;; | + | |
| - | | + | |
| - | user=${Zeile[0]} | + | |
| - | esac | + | |
| - | + | ||
| - | #Zeit und IP aus dem Array in Variablen schreiben | + | |
| - | zeit=${Zeile[2]} | + | |
| - | ip=${Zeile[4]%%/*:} | + | |
| - | # Umwandeln der Worte STOR in " | + | |
| - | case ${Zeile[5]} in | + | |
| - | | + | |
| - | updown=" | + | |
| - | ;; | + | |
| - | RETR) | + | |
| - | updown=" | + | |
| - | ;; | + | |
| - | IDLE) | + | |
| - | updown=" | + | |
| - | ;; | + | |
| - | | + | |
| - | esac | + | |
| - | + | ||
| - | what='' | + | |
| - | for (( z=6 ; $z< | + | |
| - | do | + | |
| - | # echo $z | + | |
| - | what=$what\ ${Zeile[$z]} | + | |
| - | # echo $what | + | |
| - | done | + | |
| - | # Setzen des Seperierungszeichens, | + | |
| - | IFS=$'' | + | |
| - | # Ausgabe der jeweiligen ArrayZeile | + | |
| - | printf "| %-15s| %-5s | %-17s| %-10s| %-60s|\n" | + | |
| - | + | ||
| - | done | + | |
| - | + | ||
| - | if [ ! $i = " | + | |
| - | then | + | |
| - | linie | + | |
| - | fi | + | |
| - | + | ||
| - | echo | + | |
| - | </ | + | |