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