Strona 1 z 1

[+] vsftpd - użytkownicy wirtualni i lokalni jednocześnie

: 28 kwietnia 2010, 18:13
autor: button
Pytanie w sumie z ciekawości, ale mocuję się z tym od wczoraj i poległem.
W Google wiele podobnych pytań ale bez odpowiedzi, a na ircu projektu cisza.

Zainstalowałem sobie z nudów na localhoście serwer ftp na vsftpd właśnie, uruchomiłem, lokalni użytkownicy mogli się logować, więc poszedłem sobie dalej i zrobiłem użytkowników wirtualnych zapisanych w MySqlu. Wszystko działa. Tylko pojawia się taki problem, że działa albo jedno albo drugie, razem nie chce zaskoczyć za nic. Oczywiście na początku rozbiło się o konfigurację PAM-a, bo albo wpisze się tam połączenie z MySql albo użytkowników lokalnych. Więc dodałem do głównego pliku konfiguracyjnego vsftpd:

Kod: Zaznacz cały

user_config_dir=/etc/vsftp_user_conf/
i tam dodałem plik z nazwą użytkownika, którego mam w bazie. W głównym konfigu wpisałem także:

Kod: Zaznacz cały

pam_service_name=vsftpd
Czyli logowanie użytkowników lokalnych, a w pliku konfiguracyjnym użytkownika wirtualnego (/etc/vsftp_user_conf/użytkownik) po prostu nadpisałem wartość:

Kod: Zaznacz cały

pam_service_name=vsftpd_virtualusers
Czyli tam, gdzie jest zapisana konfiguracja PAM-a dla MySql.

Ale nie działa, wygląda to tak, jakby vsftpd całkowicie ignorował pozycję

Kod: Zaznacz cały

pam_service_name
w konfigu użytkownika.

Trochę zagmatwałem, ale może ktoś zaznajomiony bardziej z tematem coś podpowie. A może przy takiej konfiguracji lepiej sobie dać z vsftpd spokój? Chociaż dziwne by to było, w końcu serwer popularny stosowany z tego co widziałem na szeroką skalę.

No i tutaj są te moje konfigi.

/etc/vsftpd.conf:

Kod: Zaznacz cały

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
user_config_dir=/etc/vsftp_user_conf/
#
#local_root=/home/vsftpd/$USER
#user_sub_token=$USER                
#virtual_use_local_privs=YES
#guest_enable=YES
#guest_username=vsftpd
#
#
secure_chroot_dir=/var/run/vsftpd/empty
#
pam_service_name=vsftpd
#
rsa_cert_file=/etc/ssl/private/vsftpd.pem
/etc/vsftp_user_conf/użytkownik:

Kod: Zaznacz cały

 local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
guest_enable=YES
guest_username=vsftpd
pam_service_name=vsftpd_virtualusers
/etc/pam.d/vsftpd:

Kod: Zaznacz cały

# Standard behaviour for ftpd(8).
auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
 
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
 
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth    required        pam_shells.so
/etc/pam.d/vsftpd_virtualusers:

Kod: Zaznacz cały

auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=tb_users usercolumn=login passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=tb_users usercolumn=login passwdcolumn=password crypt=2

: 28 kwietnia 2010, 19:46
autor: mariaczi
Cały myk rozbija się o poprawną konfigurację pam. Poniżej zamieszczam konfigurację pam'a znalezioną gdzieś w czeluściach internetu. Powinno działać dla użytkowników lokalnych i wirtualnych.

Kod: Zaznacz cały

cat vsftpd.virtual
# Standard behaviour for ftpd(8).
auth    required    pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# Customized login using htpasswd file for virtual users
auth    sufficient    pam_pwdfile.so pwdfile /etc/vsftpd/passwd
account    sufficient    pam_permit.so

# Note: vsftpd handles anonymous logins on its own.  Do not enable
# pam_ftp.so.

# Standard blurb.
@include common-account
@include common-session

@include common-auth
auth    required    pam_shells.so
Nie daje głowy, że jest to do końca poprawne ale jak spojrzysz w logi to powinieneś się zorientować co i jak. Mam na myśli "sufficient" zamiast "required" a jest jeszcze opcja "optional" (jeśli mnie tylko pamięć nie zawodzi) i w tym kierunku poszukaj.

Powodzenia, i jak już uporasz się, to miło będzie, gdy podzielisz konfiguracje dla potomnych.

: 28 kwietnia 2010, 20:16
autor: button
Działa. Oczywiście wielkie podziękowania, miałeś rację. Miałem przeczucie, że to się rozbije o jakiś ,,warunkowy'' konfig PAM, ale zamiast od razu pójść do dokumentacji to się siłowałem. I rzeczywiście. Reguła oznaczona jako ,,sufficient'' jest wystarczająca do prawidłowej autoryzacji użytkownika. Działający konfig PAM dla vsftpd, w którym działają użytkownicy lokalni i użytkownicy wirtualni zebrani w bazie MySql wygląda tak:

Kod: Zaznacz cały

# Standard behaviour for ftpd(8).
auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

#reguly dla modulu pam_mysql do autoryzacji uzytkownikow wirtualnych
auth sufficient pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=tb_users usercolumn=login passwdcolumn=password crypt=2
account sufficient pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=tb_users usercolumn=login passwdcolumn=password crypt=2

# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.

# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth    required        pam_shells.so
Może jeszcze podam źródło, z którego ja korzystałem przy stawianiu połączenia vsftpd-mysql. Jest po polsku i dobrze opisane, więc może komuś się przyda: http://www.varlog.pl/2010/03/vsftpd-i-m ... alna-pare/