vsftpd - PAM - MySQL und pam_mkhomedir zum Erstellen von Verzeichnissen


11

Ich habe vsftpd erfolgreich mit virtuellen Benutzern verwendet, die sich mit PAM mit meiner MySQL-Datenbank verbinden. Jetzt möchte ich die Erstellung von Benutzerverzeichnissen mit erfolgreicher vsftpd-Verbindung automatisieren.

Hier ist die Konfiguration von /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

Das Hinzufügen von pam_mkhomedir zeigt nur an, dass das Verzeichnis ohne andere Nachrichten in keinem Protokoll erstellt werden kann. Es trifft also offensichtlich nicht zu. Gibt es noch etwas, was ich brauche?

Meine /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

Ich habe in meiner vsftpd.conf einen Beitrag gesehen, der besagt, dass ich das brauche, also habe ich es auch versucht:

session_support=YES

Aber jetzt scheint es sich nicht mehr zu authentifizieren, wie die Protokolle zeigen:

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.

Dies gilt auch dann, wenn ich das Verzeichnis bereits erstellt habe. Jetzt kann niemand mehr hineinkommen.

Irgendwelche Ideen?


Hallo, konnten Sie dieses Problem jemals beheben?
George

@ George Überhaupt nicht.
Tom

Ich habe das Problem auf eine ganz andere Art und Weise gelöst, mich von vsftpd entfernt und mich für pureftp entschieden. Einrichtung und Ausführung in ein paar Stunden ohne all diese Probleme. Funktioniert perfekt.
George

gehört / home / vsftpd vsftpd?
Luca Gibelli

Antworten:


0

Damit die Benutzersuche nach PAM-Modul erfolgreich ist, müssen Sie das NSS-Modul für MySQL in aktivieren nsswitch.conf(5). nss_mysqlist dein Freund.


Gibt es Referenzen, die Sie dazu angeben können? Ich kann anscheinend nichts über das Bedürfnis nss-mysqlin meinem Kontext finden?
Tom

Wie wird pam_mkhomedirder Pfad zum Home-Verzeichnis des Benutzers ermittelt, den er erstellen soll? Woher weiß es, welche Datenbank zum Auflösen des Benutzers verwendet werden soll? NSS stellt ihm diese Informationen zur Verfügung. In Ihrem Fall benötigen Sie nss_mysql , vorausgesetzt, Ihre Benutzerdatenbank ist in einer MySQL-Datenbank gespeichert.
Ashish SHUKLA

Ich versuche nur, etwas über diese Bibliothek herauszufinden. Der von Ihnen angegebene Link ist ein sehr altes Projekt ohne Dokumentation. Wenn ich dies installiere, gibt es keinen Hinweis darauf, was in Ihre nssswitch.conf eingefügt werden soll. Nur dass es 3 Parameter enthalten darf. Können Sie uns eine Anleitung geben? Es klingt so, als ob pam_mysql dasselbe ist wie nss-mysql? Ich habe pam_mysql, wo es die mysql-Datenbank verwendet, um sich bei virtuellen vsftpd-Benutzern zu authentifizieren.
Tom

PAM ist nicht dasselbe wie NSS . PAM zielt auf die Authentifizierung ab, während das Ziel von NSS darin besteht, Namen (Hostnamen, Benutzernamen usw.) aufzulösen. Die meisten Distributionen bieten ein Paket für nss_mysql, z. B. Debian und Derivate libnss-mysql. Und ja, es wird seit einem halben Jahrzehnt nicht aktualisiert, aber es funktioniert gut. Sobald Sie das Modul installiert, konfiguriert und zu Ihrem Modul hinzugefügt haben, nsswitch.conf(5)funktionieren die Dinge für Sie.
Ashish SHUKLA

Ich habe libnss-mysql aus meiner Distribution hinzugefügt. Versucht aus der Box und nichts funktioniert. Irgendwelche Ideen, was ich in nsswitch.conf ändern muss?
Tom

0

Sie können es versuchen pam_script- es ist ein Pam-Modul, mit dem beliebige Shell-Skripte ausgeführt werden können, nachdem eine Benutzersitzung geöffnet wurde (unter anderem).

Sie finden pam_scripthier: https://github.com/jeroennijhof/pam_script . Es sollte auch über Paketmanager installierbar sein, zumindest konnte ich es über apt-get installieren.

Seien Sie vorsichtig, da vsftpd einige Probleme mit pam_script zu haben scheint, zumindest wenn es die Authentifizierung verweigert. Siehe meine ungelöste Frage: vsftpd friert nach fehlgeschlagener pam_script-Authentifizierung ein . In Ihrem Fall sollte dies jedoch kein Problem sein.


0

Die kurze Antwort lautet, dass Sie System- und Dienstanmeldeinformationen mischen und pam_mkhomedir nicht mit virtuellen Benutzern in vsftpd verwenden sollten (können?).

pam_mkhomedir dient zum Erstellen lokaler Benutzerverzeichnisse und setzt voraus, dass der Benutzer im System definiert ist. Virtuelle Benutzer in vsftpd sind es nicht Systembenutzer (von Natur aus) und haben daher keine Berechtigungen außerhalb des vsftpd-Dienstes (das System kennt diese Benutzer nicht). Wenn Sie PAM zur Authentifizierung verwenden, wird nur die Überprüfung der Benutzeranmeldeinformationen (Benutzername + Kennwort ==> OK) übergeben. Dies kann bei der Verwendung virtueller Benutzer verwirrend sein, da vsftpd auch für die Verwendung von Systembenutzern mit PAM konfiguriert werden kann.

Wenn Sie das Home-Verzeichnis für a erstellen das Basisverzeichnis virtuellen Benutzer , müssen Sie das vsftpd-Dienstkonto / die vsftpd-Dienstgruppe zum Eigentümer des Ordners machen und das "virtuelle Home-Verzeichnis" im vsftpd-Dienstpfad mit den entsprechenden Berechtigungen für den vsftpd-Dienst platzieren. Ich bin mir nicht sicher, welches Problem Sie lösen möchten, aber während Sie die Benutzersitzung chrooten, gehe ich davon aus, dass Sie versuchen, eine gewisse Isolation zwischen Benutzern herzustellen. Da Sie den virtuellen Benutzer in Ihrer Benutzerdatenbank erstellen müssen, damit er sich anmelden kann, können Sie das Basisverzeichnis gleichzeitig generieren. Ich habe dies mithilfe eines Skripts zum Hinzufügen / Ändern / Löschen durch den Benutzer getan, um die Konsistenz der virtuellen Benutzerdatenbank und der virtuellen vsftpd-Benutzerordner zu gewährleisten. YMMV.

Denken Sie daran, dass Sie mit virtuellen Benutzern nur in vsftpd arbeiten und nicht im System.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.