Cygal.net.pl

Systemy, Sieci i takie tam :)

Vsftpd + PAM + MYSQL

Czasami podstawowa konfiguracja serwera ftp nie jest wystarczająca. Szczególnie w sytuacjach gdzie mamy wielu użytkowników i wielu z nich musimy traktować inaczej od pozostałych. Najlepszym rozwiązanie będzie wówczas konfiguracja serwera ftp tak aby korzystał z bazy danych. Poniżej przedstawiłem jak skonfigurować vsFTPd tak aby działał w oparciu o mysql i PAM.

1) Tworzymy bazę dla vsftpd

logujemy się do bazy mysql

	mysql -u root -p

Tworzymy nową bazę danych oraz użytkownika

	CREATE DATABASE vsftpd;
	GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'haslo';
	FLUSH PRIVILEGES;

Tworzymy schemat bazy danych

	USE vsftpd;
	CREATE TABLE `konta` (
	`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
	`uzytkownik` VARCHAR( 30 ) NOT NULL ,
	`haslo` VARCHAR( 50 ) NOT NULL ,
	UNIQUE ( `uzytkownik` )
	) ENGINE = MYISAM ;
	exit;

2) Konfigurujemy VSFTPD

Na początek stwórzmy użytkownika systemowego, z którego będzie korzystać nasz serwer FTP. Użytkownik vsftpd będzie należeć do grupy users co zapewni nam większe bezpieczeństwo systemu.

	useradd -G users -s /sbin/nologin -d /home/vsftpd vsftpd

Ok zróbmy backup oryginalnej konfiguracji vsftpd tak na wszelki wypadek 🙂

	cp -v /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

teraz przystąpmy juz do konfiguracji. Zacznijmy od przygotowania pliku vsftpd.conf, najprościej wyczyśćmy jego zawartość w celu naniesienia własnych parametrów konfiguracyjnych.

	> /etc/vsftpd/vsftpd.conf
	vim /etc/vsftpd/vsftpd.conf

vsftpd.conf  (tak wygląda moja podstawowa konfiguracja. Możesz wkleić poniższa zawartość do swojego pliku vsftpd.conf.

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
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=yes
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/vsftpd_user_conf
force_local_data_ssl=NO
force_local_logins_ssl=NO
pasv_enable=YES
pasv_min_port=44000
pasv_max_port=44100

Większość powyższych opcji opisałem w poprzednim wpisie dotyczącym konfiguracji vsftpd, zatem nie bede ich tłumaczył ponownie. Zainteresowanych odsyłam do manuala systemowego lub wpisu na moim blogu o nazwie Serwer FTP w 5 minut z wykorzystaniem vsFTPd.

W powyższym konfigu użyłem opcji user_config_dir opcja ta wskazuje katalog z konfiguracjami indywidualnymi per użytkownik. Dzięki tej opcji możemy nadpisać cześć ustawień globalnych z vsftpd i w ten sposób dostosować swoja konfiguracje do potrzeb per user. Ta opcja nie jest obligatoryjna ale może nam ułatwić życie w przyszłości.

Zatem proponuje utworzyć ten katalog już teraz

	mkdir /etc/vsftpd/vsftpd_user_conf

teraz gdy zajdzie potrzeba możemy przygotować specjalną konfiguracje np. dla jednego z naszych userów. Możemy np. w takiej konfiguracji wskazać że jego katalog domowy będzie się znajdować w innej ścieżce niż domyślnie podana w vshtpd.conf  /home/vsftpd/$USER

Sprobojmy zatem przygotować jeden przyładowy konfig dla  wybrnego usera

	vim /etc/vsftpd/vsftpd_user_conf/pawel

następnie podajemy następujące opcje.

	dirlist_enable=YES
	download_enable=YES
	local_root=/home/pawel/.ftp #zmieniona ścieżka dla katalogu użytkownika
	write_enable=YES

Oczywiście katalog użytkownika paweł musimy stworzyć recznie inaczej nie bedzie miał on możliwości zalogowania się na serwer ftp.

	mkdir /home/pawel/.ftp

nadajmy mu odpowiednie uprawnienia oraz ustawmy odpowiednie grupy

	chmod 700 /home/pawel/.ftp
	chown vsftpd.users /home/pawel/.ftp

Jak widac teraz użytkownik pawel korzystać bedzie z '/home/pawel/.ftp' zamiast  '/home/vsftpd/pawel'. Oczywiście w indywidualnym pliku konfiguracyjnym można również nadać inne atrybuty tak, aby dostosować w pełni uprawienia użytkownika do wymagań.

3) Konfiguracja modułu PAM.

Plik konfiguracyjny modułu PAM dla vsftpd znajduje się w  /etc/pam.d/vsftpd.
Na początek zróbmy backup oryginalnego pliku.

	cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

wyczyścmy teraz plik przy pomocy poniższej komendy.

	> /etc/pam.d/vsftpd

następnie odpalmy vim i wklejmy poniższą konfiguracje.

	vim /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_mysql.so user=vsftpd passwd=HASLO host=localhost db=vsftpd table=konta usercolumn=uzytkownik passwdcolumn=haslo crypt=3
account required pam_mysql.so user=vsftpd passwd=HASLO host=localhost db=vsftpd table=konta usercolumn=uzytkownik passwdcolumn=haslo crypt=3

W miejsce “HASLO” wpisz hasło dla użytkownika vsftpd którego stworzyłeś w punkcie 1

Sprawdź czy masz zainstalowany pam_mysql

	ls -al /lib/security/pam_m*
	-rwxr-xr-x 1 root root 8024 Sep 4 00:51 /lib/security/pam_mail.so
	-rwxr-xr-x 1 root root 15848 Sep 4 00:51 /lib/security/pam_mkhomedir.so
	-rwxr-xr-x 1 root root 3892 Sep 4 00:51 /lib/security/pam_motd.so
	-rwxr-xr-x 1 root root 36920 Feb 28 2008 /lib/security/pam_mysql.so

W ostatniej linii widać, że pam_mysql.so jest obecny w systemie więc jest OK.
W przeciwnym razie będziesz musiał zainstalować pam_mysql.
W SuSE możesz to zrobić wydając polecenie

	zypper install pam_mysql

w systemach z rodziny Red hat poprzez

	yum install pam_mysql

4 tworzymy naszego pierwszego wirtualnego usera dla serwera ftp

	mysql -u root -p
	USE vsftpd;
	INSERT INTO konta (uzytkownik, haso) VALUES('user1', md5('haselko'));

Sprawdźmy czy nasz user został dodany

	mysql> select * from kta;
	+----+-----------+----------------------------------+
	| id | uzytkownik | haslo |
	+----+-----------+----------------------------------+
	| 1 | user1 | 45be2294ecd0e0f08eab7ewq2aewq |
	+----+-----------+----------------------------------+
	1 rows in set (0.00 sec)
	exit;

teraz katalogiem domowym  naszego pierwszego usera jest '/home/vsftpd/user1' , Niestety vsftpd nie tworzy automatycznie katalogów domowych zatem musimy sami zadbać o to aby stworzony wirtualny user posiadał odpowiedni katalog.

	mkdir /home/vsftpd/user1
	chown vsftpd:users /home/vsftpd/user1

Na koniec restartujemy vsftpd tak, aby wczytał nową konfigurację

	Service vsftpd restart

Lub

	/etc/init.d/vsftpd restart

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


Time limit is exhausted. Please reload CAPTCHA.