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?
Antworten:
Damit die Benutzersuche nach PAM-Modul erfolgreich ist, müssen Sie das NSS-Modul für MySQL in aktivieren
nsswitch.conf(5)
.nss_mysql
ist dein Freund.quelle
nss-mysql
in meinem Kontext finden?pam_mkhomedir
der 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.nss_mysql
, z. B. Debian und Derivatelibnss-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.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_script
hier: 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.
quelle
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.
quelle