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ítsük tárolóból:
apt-get install vsftpd
Vagy szedjük le a weboldaláról a legújabbat:
/etc/vsftpd.conf
A CentOS-ben van egy külön könyvtár:
/etc/vsftpd/
a következő fájlokkal:
A beállítások a /etc/vsftpd/vsftpd.conf fájlban.
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
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ó.
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>
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.
A helyi felhasználók alapértelmezetten nincsenek engedélyezve. Engedélyezzük:
mcedit /etc/vsftpd.conf
local_enable=YES
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 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
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
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/
Ez a rész Debian GNU/Linux 7.x (és Ubuntu) szerveren nem működik kisebb gondok miatt. A Debian GNU/Linux 6.x még működik. Megoldása kidolgozás alatt.
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 -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;
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
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
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
/usr/share/doc/vsftpd
man 5 vsftpd.conf
man 8 vsftpd
man pam.d man PAM