[[oktatas:linux:ftp_szerver|< FTP szerver]] ====== VsFTPd ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2011, 2012, 2013 * Licenc: GNU Free Documentation License 1.3 * Web: http://szit.hu ===== Bevezetés ===== Több Linux terjesztés csak ezt az FTP szervert szállítja az alapértelmezett tárolójában. A nevében a Vs a "Very Secure" szavak kezdőbetűi. Vagyis a VsFTPd szerver készítője szerint nagyon biztonságos. ===== Telepítés ===== Telepítsük tárolóból: apt-get install vsftpd Vagy szedjük le a weboldaláról a legújabbat: * https://security.appspot.com/vsftpd.html ===== Beállítások ===== ==== Debian GNU/Linux ==== /etc/vsftpd.conf ==== CentOS ==== A CentOS-ben van egy külön könyvtár: /etc/vsftpd/ a következő fájlokkal: * ftpusers * user_list * vsftpd.conf * vsftpd_conf_migrate.sh A beállítások a /etc/vsftpd/vsftpd.conf fájlban. ===== Névtelen felhasználó ===== ==== Működés ==== Az anonymous felhasználók könyvtára: /srv/ftp/ Az anonymous felhasználó alapértelmezetten csak letölthet. Fel nem. Hogy fel tudjon tölteni a /etc/vsftpd.conf fájl végére fűzzük a következő két utasítást: write_enable=YES anon_upload_enable=YES Ha az első nincs megadva, akkor az anonymous felhasználó sem tölthet fel. A beállítások után töltsük újra a szolgáltatás konfigurációs állományát: invoke-rc.d reload Az anonymous felhasználók egy incoming nevű könyvtárba tölthetnek fel. Hozzuk ezt létre: mkdir /srv/ftp/incoming Tegyük az ftp csoprtba: chgrp ftp /srv/ftp/incoming A feltöltéshez a /srv/ftp/incoming könyvtár jogait is meg kell változtatni. Hozzá kell adni a csoportnak írási jogot. Az olvasási jogot szokás szerint pedig tiltjuk: chmod g+w,g-r /srv/ftp/incoming ==== Teszt ==== A beállításokat a tesztelhetjük a szerverünkön vagy egy távoli gépen is. A teszteket valamilyen FTP kliens programmal végezzük. Az ilyen teszteket végezzük egyszerű linuxos felhasználóként, ne rootként! A szerveren alapértelmezésként fel kerül egy egyszerű ftp kliens, valójában egy parancs, amelynek neve: ftp. Nézzük meg a szerver IP címét. Legyen például a következő: 192.168.5.6. A teszteléshez készítsünk egy állományt amit majd felölthetünk: echo "Teszfájl" > id.txt Ezek után a kapcsolódjunk az FTP szerverünkhöz: ftp 192.168.5.6 A következőket láthatjuk: Connected to 192.168.5.6. 220 (vsFTPd 2.3.5) Name (192.168.5.6:joska): A program itt várja, hogy beírjunk egy felhasználónevet. Ha csak "Enter"-t nyomunk, akkor joska felhasználó lesz az alapértelmezés. Írjuk be az anonymous nevet: Name (192.168.5.6:joska): anonymous 331 Please specify the password. Password: Az anonymoust beírva, majd "Enter"-t nyomva kéri a jelszót. Nem kell semmit beírnunk, csak egyszerűen nyomjunk megint "Enter"-t. Ehhez hasonlót kell látnunk: Remote system type is UNIX. Using binary mode to transfer files. ftp> Kapunk egy ftp> várakozási jelet. A "help" parancs segítségével kérdezhetjük le a használható parancsokat. Nekünk négy fontos parancs szükséges. A feltöltő, letöltő és a könyvtár váltó. * Letöltő: get * Feltöltő: send * Könyvtárváltó: cd * Kapcsolat megszakítása: bye Töltsük fel az állományunkat. A feltöltés csak az incoming könyvtárba lehetséges, ezért váltsunk ebbe a könyvtárba: ftp> cd incoming 250 Directory successfully changed. ftp> send id.txt local: id.txt remote: id.txt 200 PORT command successful. Consider using PASV. 150 Ok to send data. 226 Transfer complete. 103 bytes sent in 0.01 secs (7.9 kB/s) ftp> ==== Letiltása ==== A /etc/vsftpd.conf fájlban javaítsuk ki a anonymous_enable értékét YES helyett NO-ra. sed -i s/anonymous_enable=YES/anonymous_enable=NO/ /etc/vsftpd.conf Az engedélyezés ugyanígy, csak YES-re állítjuk. ===== Helyi felhasználók ===== A helyi felhasználók alapértelmezetten nincsenek engedélyezve. Engedélyezzük: mcedit /etc/vsftpd.conf local_enable=YES ===== Virtuális felhasználók ===== ==== vsftpd konfigurálása ==== Az alapbeállításokat feltételezem: # Egyedi démonként fut ipv4-en: listen=YES # Mindenki csak a saját könyvtárában: chroot_local_user=YES # Helyi felhasználók engedélyezése: local_enable=YES # A PAM fájl neve az /etc/pam.d könyvtárban: pam_service_name=vsftpd # Virtuális felhasználók is lehetnek: guest_enable=YES # A virtuális felhasználók ennek a felhasználónak a nevében férnek a fájlrendszerhez. guest_username=ftpuser # Az FTP felhasználók root könyvtára: local_root=/home/virtual-ftp/$USER user_sub_token=$USER # A feltöltéshez kell ez is: write_enable=YES Indítsuk újra a vsftpd démont: /etc/init.d/vsftpd restart ==== A PAM modul beállítása ==== A PAM azonosítást fogjuk átírni, ezért az eredetit elmentjük: mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.Mentes Az új PAM azonosítás userdb-ből: auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login ==== Felhasználók felvétele ==== mkdir /etc/vsftpd A következő két felhasználó (joska, tibi) léphet be "titok" jelszóval: joska titok tibi titok A jelszavakat Berkeley DB adatbázisba tesszük. Ehhez szükségünk van a db4.8-util csomagra: apt-get install db4.8-util db4.8_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db chmod 600 /etc/vsftpd/vsftpd_login.db chmod 600 logins.txt ==== Egyéni beállítások ==== Fűzzük az alábbi beállítást a /etc/vsftpd.conf fájl végére: user_config_dir=/etc/vsftpd/users Ebben a könyvtárban a felhasználóval azonos néven létrehozott fájlban mindenkinek külön beállítása lehet. Például joska könyvtára és sávszélessége: echo "local_root=/home/virtual-www/zold.and" > /etc/vsftpd/users/joska echo "anon_max_rate=20000" >> /etc/vsftpd/users/joska Ekkor a joska felhasználó könyvtára a /home/virtual-www/zold.and/ ===== MySQL azonosítás ===== ==== Megjegyzés ==== Ez a rész Debian GNU/Linux 7.x (és Ubuntu) szerveren nem működik [[http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=656900|kisebb gondok]] miatt. A Debian GNU/Linux 6.x még működik. Megoldása kidolgozás alatt. ==== Szükséges telepítések ==== Szükségünk van a MySQL szerverre és PAM-nak képesnek kell lenni MySQL-ből azonosítani. Ehhez a következő két csomagot tegyük fel: apt-get install libpam-mysql mysql-server Feltételezzük, hogy a vsftpd már fent van. ==== MySQL teendők ==== mysql -u root -p Először biztonsági beállítások: use mysql delete from user where User=""; update user set Password=password("titok") WHERE User="root"; FLUSH PRIVILEGES; create database vsftpd; use vsftpd; create table accounts (user char(30) binary, pass char(30) binary); insert into accounts (user, pass) values('jozsi', password('titok')); GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `vsftpd`.* TO ‘vsftpd’@’localhost’ IDENTIFIED BY ‘titok’; quit; ==== Beállítás ==== Hozzunk létre egy felhasználót akinek a nevében vsftpd eléri a fájlrendszert, ha virtuális felhasználó lép be: useradd --home /home/vsftpd --gid nogroup --shell /bin/false -m vsftpd Az eredeti vsftpd.conf fájlról készítsünk mentést, majd töröljük a tartalmát, és szerkesszük: cp /etc/vsftpd.conf /etc/vsftpd.conf_orig cat /dev/null > /etc/vsftpd.conf nano /etc/vsftpd.conf Szerkesszük a vsftpd.conf fájlt az alábbiak szerint: listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES nopriv_user=vsftpd chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem guest_enable=YES guest_username=vsftpd local_root=/home/vsftpd/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd_user_conf ==== A PAM beállítások ==== auth required pam_mysql.so user=vsftpd passwd=titok host=localhost db=vsftpd table=accounts usercolumn=user passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=titok host=localhost db=vsftpd table=accounts usercolumn=user passwdcolumn=pass crypt=2 ===== SSL ===== RSA tanúsítvány létrehozása a vsftpd számára: cd /etc/ssl/private/ openssl req -x509 -nodes -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem Ügyeljünk arra, hogy a private könyvtár csak a Debian alapú rendszerekben létezik. CentOSben például létre kell azt hozni. A következőkben feltételezem,hogy a vsftpd.pem az etc könyvtárba tettük. Fűzzük a beállítások végére a /etc/vsftpd/vsftpd.conf fájlban: #SSL engedélyezése: ssl_enable=YES # A bejelentkezés SSL-en: force_local_logins_ssl=YES # Az adatok is SSL-en mennek force_local_data_ssl=YES # Az RSA tanúsítvány helye rsa_cert_file=/etc/ssl/private/vsftpd.pem # Esetleg még ezek: allow_anon_ssl=NO ssl_tlsv1=YES ssl_sslv2=YES ssl_sslv3=YES ===== Dokumentáció ===== /usr/share/doc/vsftpd man 5 vsftpd.conf man 8 vsftpd * http://vsftpd.beasts.org/vsftpd_conf.html man pam.d man PAM ===== Linkek ===== * http://www.howtoforge.com/vsftpd_mysql_debian_etch_p2 * http://ubuntuforums.org/showthread.php?t=518293 * http://cviorel.easyblog.ro/2009/03/05/how-to-setup-vsftpd-ftp-on-ubuntu-linux/ * http://howto.gumph.org/content/setup-virtual-users-and-directories-in-vsftpd/ * http://linuxforfun.net/2008/04/05/vsftpd-virtual-users/ * http://www.linux-pam.org (PAM) * http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html (PAM) ===== Leírások ===== * /usr/share/doc/libpam-mysql/README.Debian * /usr/share/doc/libpam-mysql/README.gz * /usr/share/doc/vsftpd/