Z powodzeniem korzystam z vsftpd z wirtualnymi użytkownikami łączącymi się z PAM z moim DB MySQL. Teraz chciałbym zautomatyzować tworzenie katalogów użytkowników dzięki udanemu połączeniu vsftpd.
Oto konfiguracja /etc/pam.d/vsftpd:
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
account required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
session required pam_mkhomedir.so skel=/home/skel/ umask=0022 debug
Dodanie pam_mkhomedir pokazuje teraz, że nie można utworzyć katalogu bez innych komunikatów w żadnym dzienniku. Więc oczywiście nie ma zastosowania. Czy jest coś jeszcze, czego potrzebuję?
Mój /etc/vsftpd/vsftpd.conf:
# No ANONYMOUS users allowed
anonymous_enable=NO
# Allow 'local' users with WRITE permissions (0755)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=YES
# define a unique user on your system which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=vsftpd
chroot_local_user=YES
listen=YES
# here we use the authentication module for vsftpd to check users name and passw
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=YES
# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
download_enable=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
# PASV - passive ports for FTP
pasv_enable=YES
pasv_min_port=14000
pasv_max_port=14100
Widziałem post z informacją, że potrzebuję tego w moim pliku vsftpd.conf, więc spróbowałem też:
session_support=YES
Ale teraz nie wydaje się już uwierzytelniać, jak pokazują logi:
Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_keyinit(vsftpd:session): Unable to look up user "user1"
Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_mkhomedir(vsftpd:session): User unknown.
Dzieje się tak nawet wtedy, gdy już utworzyłem katalog. Teraz nikt nie może wejść.
Jakieś pomysły?
Odpowiedzi:
Aby wyszukiwania użytkowników według modułu PAM zakończyły się powodzeniem, musisz włączyć moduł NSS dla MySQL w
nsswitch.conf(5)
.nss_mysql
jest twoim przyjacielem.źródło
nss-mysql
w moim kontekście?pam_mkhomedir
wymyślić ścieżkę do katalogu domowego użytkownika, który ma stworzyć? Skąd ma wiedzieć, której bazy danych użyć do rozwiązania użytkownika? NSS udostępnia te informacje. W twoim przypadku będziesz potrzebować nss_mysql , zakładając, że twoja baza danych użytkowników jest przechowywana w bazie danych MySQL.nss_mysql
, np. Debian i pochodne zapewniają go jakolibnss-mysql
. I tak, nie jest aktualizowany przez pół dekady, ale działa dobrze. Po zainstalowaniu modułu skonfiguruj go i dodaj do swojegonsswitch.conf(5)
, wszystko zacznie działać.Możesz spróbować użyć
pam_script
- jest to moduł pam, który pozwala wykonywać dowolne skrypty powłoki po otwarciu sesji użytkownika (między innymi).Można znaleźć
pam_script
tutaj: https://github.com/jeroennijhof/pam_script . Powinien być również instalowany za pośrednictwem menedżerów pakietów, przynajmniej byłem w stanie zainstalować go za pośrednictwem apt-get.Uważaj, ponieważ vsftpd wydaje się mieć pewne problemy z pam_script, przynajmniej gdy odmawia uwierzytelnienia, zobacz moje nierozwiązane pytanie: vsftpd zawiesza się po nieudanym uwierzytelnieniu pam_script . Jednak w twoim przypadku nie powinno to stanowić problemu.
źródło
Krótka odpowiedź brzmi: łączysz dane uwierzytelniające systemu i usługi i nie powinieneś (nie możesz) używać pam_mkhomedir z wirtualnymi użytkownikami w vsftpd.
pam_mkhomedir służy do tworzenia lokalnych katalogów użytkownika i zakłada, że użytkownik jest zdefiniowany w systemie. Użytkownicy wirtualni w vsftpd nie są użytkownikami systemu (zgodnie z projektem) i jako tacy nie mają żadnych uprawnień poza usługą vsftpd (system nie ma wiedzy o tych użytkownikach). Użycie PAM do uwierzytelnienia polega jedynie na sprawdzeniu poprawności poświadczeń użytkownika (nazwa użytkownika + hasło ==> OK). Może to być mylące podczas korzystania z wirtualnych użytkowników, ponieważ vsftpd można również skonfigurować do korzystania z użytkowników systemu z PAM.
Podczas tworzenia katalogu domowego dla użytkownika wirtualnego należy uczynić konto / grupę usługi vsftpd właścicielem folderu i umieścić „wirtualny katalog domowy” w ścieżce usługi vsftpd, z odpowiednimi permsami dla usługi vsftpd. Nie jestem pewien, jaki problem próbujesz rozwiązać, ale kiedy chrootujesz sesję użytkownika, zakładam, że próbujesz stworzyć izolację między użytkownikami. Ponieważ musisz utworzyć wirtualnego użytkownika w bazie danych użytkowników, aby mogli się zalogować, dlaczego nie wygenerować katalogu domowego w tym samym czasie? Zrobiłem to za pomocą skryptu dodawania / zmiany / usuwania użytkownika, aby zachować spójność wirtualnej bazy danych użytkowników i wirtualnych folderów domowych użytkownika vsftpd. YMMV.
Pamiętaj tylko, że z wirtualnymi użytkownikami pracujesz tylko w vsftpd, a nie w systemie.
źródło