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 | + | |
- | </ | + |