Jak na FTP server na Debian Squeeze pomocí vsftpd a MySQL

1. Instalace vsftp, MySQL a phpmyadmin

Vsftpd nemá v sobě podporu MySQL, takže použijeme PAM k ověření vůči MySQL databázi.

apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin

Zobrazí se vám tyto otázky:

Nové heslo MySQL uživatele "root": <-- vaserootheslododatabaze
Zopakujte heslo MySQL uživatele "root": <-- vaserootheslododatabaze
Webový server, který se má nastavit automaticky: <-- apache2
Nastavit databázi pro phpmyadmin pomocí dbconfig-common?: <-- ne


2. Vytvoření databáze pro vsftpd

Nyní vytvořníme databázi, která se bude jmenovat vsftpd a uživatele vsftpd, kterého bude využívat vsftpd daemon pro připojení k databázi vsftpd.

mysql -u root -p

CREATE DATABASE vsftpd;

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdheslo';

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdheslo';

FLUSH PRIVILEGES;

Nahraď ftpdheslo vlastním heslem. Nyní vytvoříme databázové tabulky:

USE vsftpd;

CREATE TABLE `accounts` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `username` VARCHAR( 30 ) NOT NULL , `pass` VARCHAR( 50 ) NOT NULL , UNIQUE ( `username` ) ) ENGINE = MYISAM ;

quit;

 

3. Konfigurace vsftpd

Nyní vytvoříme uživatele, pod kterým vsftpd poběží, a adresáře virtuálních uživatelů, které budou v /home/vsftpd.

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Poté vytvoříme zálohu originál souboru /etc/vsftpd.conf a vytvoříme náš vlastní.

cp /etc/vsftpd.conf /etc/vsftpd.conf_orig

cat /dev/null > /etc/vsftpd.conf

vi /etc/vsftpd.conf

Soubor by měl obsahovat toto:

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

Podrobněji je konfigurace popsána na http://vsftpd.beasts.org/vsftpd_conf.html.

Kdybysme později chtěli přepsat globání nastavení pro konkrétního uživatele, tak můžeme pomocí konfigurační souborů, vytvoříme proto adresář:

mkdir /etc/vsftpd_user_conf

Nyní musíme nastavit PAM aby používal MySQL databázi pro ověření uživatelů místo /etc/passwd nebo /etc/shadow.

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig

cat /dev/null > /etc/pam.d/vsftpd

vi /etc/pam.d/vsftpd

A vlože do něj:

auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

Nezapomeň nahradit ftpdheslo za své, které jsi vytvářel v bodu 2.

Pak restartujeme vsftpd:

/etc/init.d/vsftpd restart

 

4. Tvorba virtuálního uživatele

Přihlásíme se do databáze a vytvoříme prvního uživatele s názvem test a heslem heslo (změňte za vlastní).

mysql -u root -p

USE vsftpd;

INSERT INTO accounts (username, pass) VALUES('test', PASSWORD('heslo'));

quit;

Domovský adresář uživatele je /home/vsftpd/test. vsftpd bohužel neumí vytvářet adresáře automaticky, tak ho musíme vytvořit ručně:

mkdir /home/vsftpd/test

chown vsftpd:nogroup /home/vsftpd/test

Nyní je FTP server nastaven a první uživatel připraven na vyzkoušení, jestli FTP funguje.