vsftpd - PAM - MySQL i pam_mkhomedir do tworzenia katalogów

11

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?

Tomek
źródło
Cześć, czy kiedykolwiek byłeś w stanie rozwiązać ten problem?
George
@George Wcale nie.
Tom
Rozwiązałem problem w zupełnie inny sposób, odszedłem od vsftpd i poszedłem z pureftp. Skonfiguruj i uruchom w ciągu kilku godzin bez tych wszystkich problemów. Działa świetnie.
George
jest własnością / home / vsftpd przez vsftpd?
Luca Gibelli,

Odpowiedzi:

0

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_mysqljest twoim przyjacielem.

Ashish SHUKLA
źródło
Jakieś referencje na ten temat? Nie mogę znaleźć czegoś na temat potrzeby nss-mysqlw moim kontekście?
Tom
Jak pam_mkhomedirwymyś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.
Ashish SHUKLA
Próbuję tylko dowiedzieć się czegoś o tej bibliotece. Podany link to bardzo stary projekt bez dokumentacji. Jeśli go zainstaluję, nie da to żadnych wskazówek, co umieścić w pliku nssswitch.conf. Tyle tylko, że może zawierać 3 parametry. Czy możesz podać jakieś wskazówki? Wygląda na to, że pam_mysql jest tym samym, co nss-mysql? Mam pam_mysql działający tam, gdzie używa mysql db do uwierzytelnienia się z wirtualnymi użytkownikami vsftpd.
Tom
PAM to nie to samo co NSS . PAM jest ukierunkowany na uwierzytelnianie, podczas gdy celem NSS jest rozpoznawanie nazw (nazw hostów, nazw użytkowników itp.). Większość dystrybucji zawiera pakiet nss_mysql, np. Debian i pochodne zapewniają go jako libnss-mysql. I tak, nie jest aktualizowany przez pół dekady, ale działa dobrze. Po zainstalowaniu modułu skonfiguruj go i dodaj do swojego nsswitch.conf(5), wszystko zacznie działać.
Ashish SHUKLA
Dodałem libnss-mysql z mojej dystrybucji. Próbowałem po wyjęciu z pudełka i nic nie działa. Wszelkie pomysły na to, co muszę zmienić w nsswitch.conf?
Tom
0

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_scripttutaj: 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.

edziubudzik
źródło
0

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.

Yaro
źródło