Wie richte ich virtuelle Benutzer für vsftpd mit Zugriff auf ein bestimmtes Unterverzeichnis ein?

24

Ich muss in der Lage sein, virtuelle Benutzer zu vsftpd hinzuzufügen, die nur Zugriff auf einen Unterordner haben. Der Grund, warum ich virtuelle Benutzer verwenden möchte, ist, dass ich nur einen realen Benutzer auf dem Server haben möchte.

Die FTP-Struktur lautet:

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

Das Hauptkonto hat Zugriff auf den Ordner www und alle Unterverzeichnisse, und ich möchte einen virtuellen Benutzer hinzufügen, der Zugriff auf den Ordner sub_folder1 und nur auf den Ordner sub_folder1 haben kann

Um Verwirrung zu vermeiden, würde ich auch verlangen, dass ein anderer Benutzer auf sub_folder3 und nur auf sub_folder3 zugreift . Mein Punkt ist, dass ich in der Lage sein muss, den Ordner und die Unterordner auf Benutzerbasis auszuwählen.

Ich habe Möglichkeiten gefunden, Benutzer hinzuzufügen, um die gesamten Struktur- oder Setup-Benutzerordner anzuzeigen, die für mich beide keine Verwendung haben.

Ich habe hier eine ähnliche Frage gefunden:

So richten Sie VSFTPD für mehrere Benutzer ein, einschließlich des Hinzufügens bestimmter Verzeichnisse

aber es empfiehlt sich proftpddas ich zwar allgemein weniger sicher war.
Oder habe ich den Punkt hier verpasst?

Avenyet
quelle
Ich hatte die längste Zeit ein Problem mit der Authentifizierung, bis ich dieses Problem fand . Dieser Leitfaden löst dieses Problem.

Antworten:

31

Mit ein bisschen herumspielen habe ich es geschafft, eine halbe Lösung zu finden (nicht perfekt, aber gut genug)

Ich habe mithilfe von 2707974 Antworten und Informationen an anderer Stelle gewonnen, an der ich das bekommen habe, was ich brauche.

Zuerst müssen Sie vsftp und PAM installiert haben

apt-get install vsftpd libpam-pwdfile

Bearbeiten Sie die Datei /etc/vsftpd.conf

nano /etc/vsftpd.conf

Dann fügen Sie Folgendes ein

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

Passen Sie die Einstellungen genau Ihren Bedürfnissen an. Das wichtigste Element für virtuelle Benutzer ist alles nach dem Kommentar zu den Einstellungen für virtuelle Benutzer

Benutzer anlegen

Sie können entweder eine Datenbank verwenden oder htpasswdich fand htpasswdschneller und einfacher zu bedienen.

Erstellen Sie ein Verzeichnis zum Speichern Ihrer Benutzer

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

Hinzufügen weiterer Benutzer einfach weglassen -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

Ich habe es nur geschafft, es mit CRYPT zum Laufen zu bringen, das auf 8 Zeichen begrenzt ist , um mehr als 8 Zeichen zu verwenden. Verwenden Sie openssl, um einen kompatiblen Hash und eine Pipeline direkt in htpasswd zu generieren

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

Sobald Ihre Benutzer erstellt sind, können Sie jetzt Ihre PAM-Konfigurationsdatei ändern

nano /etc/pam.d/vsftpd

und entfernen Sie alles in dieser Datei und ersetzen Sie durch die folgenden

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

Dies aktiviert die Anmeldung für Ihre in definierten virtuellen Benutzer /etc/vsftpd/ftpd.passwdund deaktiviert lokale Benutzer

Als nächstes müssen wir einen Benutzer hinzufügen, den diese virtuellen Benutzer verwenden können. Diese Benutzer haben keinen Zugriff auf die Shell und werden aufgerufenvsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Der Benutzer muss guest_username=vsftpdin der Datei vsftpd conf übereinstimmen

Verzeichniszugriff definieren

Die wichtige Zeile hier ist die folgende

user_config_dir=/etc/vsftpd_user_conf

Dies bedeutet, dass beim user1Anmelden nach der folgenden Datei gesucht wird

/etc/vsftpd_user_conf/user1

Diese Datei entspricht der, vsftpd.confso dass Sie eine neue definieren könnenlocal_root

Zurück zu der Frage, auf die wir user1nur Zugriff haben möchten var/www/website_name1/sub_folder1, also müssen wir den vsftpd_user_confOrdner erstellen :

mkdir /etc/vsftpd_user_conf

Erstellen Sie nun die Benutzerdatei:

nano /etc/vsftpd_user_conf/user1

und geben Sie die folgende Zeile ein

local_root=/var/www/website_name1/sub_folder1

Starten Sie nun vsftp neu

service vsftpd restart

Sie sollten sich jetzt als Benutzer1 anmelden können, der nur var/www/website_name1/sub_folder1Ordner und Dateien darin sehen kann.

Nun können Sie so viele Benutzer hinzufügen, wie Sie möchten, und deren Zugriff auf einen beliebigen Ordner beschränken.

Wichtig: Wenn Sie keine Benutzer-Konfigurationsdatei erstellen, wird standardmäßig der Ordner var / www als Stammverzeichnis verwendet (im obigen Beispiel).

Wenn der Unterordner vom Benutzer geändert werden soll, muss möglicherweise der Eigentümer des freigegebenen Unterordners geändert werden:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1
Avenyet
quelle
Dies funktioniert mit einigen Änderungen: 1) Verwenden Sie absolute Pfade (ersetzen Sie Pfade, die mit "var /" beginnen, durch "/ var". 2) vsftpd 2.3.5, das in Ubuntu 12.04 die Option allow_writeable_chroot nicht unterstützt, kann durch die Installation von Patches behoben werden vsftpd .
Gadelat
Hallo, mit dem SSL-Passwort lassen wir -c mit -d wieder weg oder lassen -c einfach weg? Führen Sie die Abfrage erneut aus, um das Kennwort zu ändern. oder gibt es eine andere methode. Danke
mdixon18
Warum müssen Sie mit useradd --home ein Home-Verzeichnis erstellen? es ist notwendig?
e-info128
1
Zusätzlich: Aktivieren Sie sichere TLS-Verbindungen. digitalocean.com/community/tutorials/…
e-info128
1
Für einige Installationen sind möglicherweise Apache2-Utils erforderlich. Ich habe es nicht in die Antworten aufgenommen, da es nicht für alle relevant ist.
Avenyet
12

Versuchen Sie es mit diesem Handbuch. Vielleicht wird für Sie arbeiten.

Wie es geht

Installieren Sie vsftpd und eine PAM-Bibliothek

Bearbeiten /etc/vsftpd.confund/etc/pam.d/vsftpd

Erstellen Sie Benutzerkonten mit benutzerdefinierten Verzeichnissen (z. B. in / var / www /).

Stellen Sie die Verzeichnisse mit dem richtigen chmodund einchown

Erstellen Sie einen Administrator mit vollem Zugriff auf den Server

  1. Installieren Sie vsftpd(Very Secure FTP Deamon) und libpam-pwdfileerstellen Sie virtuelle Benutzer

Ich wollte FTP-Benutzer erstellen, aber keine lokalen Unix-Benutzer hinzufügen (kein Shell-Zugriff, kein Home-Verzeichnis usw.). Ein PAM (Pluggable Authentication Modules) unterstützt Sie beim Erstellen virtueller Benutzer.

sudo apt-get install vsftpd libpam-pwdfile

  1. Bearbeiten vsftpd.conf

Zuerst müssen Sie die Originaldatei sichern

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

Dann erstelle eine neue

sudo vim /etc/vsftpd.conf

Kopieren Sie die folgenden Zeilen und fügen Sie sie ein. Die Datei sollte NUR diese Zeilen enthalten:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. Registrieren Sie virtuelle Benutzer

Um einen Benutzer zu registrieren, den Sie verwenden htpasswd, gehe ich davon aus, dass Sie apache2auf Ihrem Server arbeiten. Erstellen Sie einen vsftpdOrdner und speichern Sie die Konfigurationsdateien.

sudo mkdir /etc/vsftpd

dann

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c bedeutet, dass wir die Datei erstellen, wenn sie noch nicht existiert. -d erzwingt MD5. Sie benötigen sie unter Ubuntu 12.04. Verwenden Sie sie einfach immer

Der Befehl fordert zur Eingabe eines Kennworts auf.

Wenn Sie später neue Benutzer hinzufügen möchten:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. Konfigurieren Sie PAM in /etc/pam.d/vsftpd

Auch hier müssen Sie die Originaldatei sichern

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

und erstelle eine neue

sudo vim /etc/pam.d/vsftpd

Kopieren Sie diese 2 Zeilen und fügen Sie sie ein (dies sollte der einzige Inhalt sein). Ich bestehe nur auf diesen 2 Zeilen, habe viel Zeit mit dem Aufbewahren der Originale verschwendet und diese einfach hinzugefügt.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. Erstellen Sie einen lokalen Benutzer ohne Shell-Zugriff

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Sie können überprüfen, ob es mit dem Befehl id erstellt wurde: id vsftpd. Wir definieren den Benutzer mit der / bin / false-Shell aufgrund des check_shell-Parameters (auch wenn Sie ihn nicht verwenden). Wenn der Endbenutzer eine Verbindung zum FTP-Server herstellt, wird er für Rechte und Eigentum verwendet:

chmodund chown.

  1. Neustart vsftpd

Der übliche Weg ist, init.d wie all deamon zu verwenden

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. Erstellen Sie Verzeichnisse

Je nach Konfiguration werden alle Benutzer in diesen Ordner gestellt: / var / www / user1.

Sie müssen sie mit bestimmten Rechten erstellen: Der Stammordner kann nicht beschreibbar sein!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

Hinweis: Der Benutzer kann keine Dateien oder Ordner im Stammverzeichnis erstellen.

In vsftpd.confwe have chroot_local_user=YESkann der Benutzer also nichts außerhalb seines Ordners sehen. Für ihn sieht der Server so aus:

Führen Sie einfach die folgenden Befehle aus:

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

Der /var/www/user1Ordner MUSS existieren oder die Verbindung schlägt fehl.

Im Moment können Sie versuchen, eine Verbindung mit Ihrem FTP herzustellen

  1. Erstellen Sie einen Admin-Benutzer, um auf den gesamten Server zuzugreifen

Um einen Admin-Benutzer zu erstellen, müssen wir einen neuen Benutzer bei registrieren htpasswd.

Bevor wir dies tun, empfehle ich Ihnen, in die /etc/ftpusersDatei einzuchecken, in der bestimmte Benutzer definiert sind, die keine Verbindung mit ftp herstellen dürfen. Ich denke, es ist nur für lokale Benutzer und nicht für virtuelle Benutzer, aber nur für den Fall, wählen Sie keinen Namen in dieser Datei.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

Jetzt müssen wir eine neue Zeile hinzufügen /etc/vsftpd.conf

chroot_list_enable=YES

Dies bedeutet, dass Ihr Benutzer in seinem Ordner (als Gefängnis) AUSSER Benutzern in der Datei / etc / abgelegt wird.

vsftpd.chroot_list

Lassen Sie uns diese Datei erstellen und unseren Benutzer hinzufügen. Die Datei ist eine einfache Zeile, die "theadmin" enthält. Fügen Sie einen Benutzer pro Zeile hinzu. Das bedeutet, dass Sie KEINEN /var/www/theadminOrdner erstellen müssen , der Benutzer wird sich anmelden und in starten /home/vsftpd.

Starten Sie den Server neu und fertig!

2707974
quelle
Versuchte dies schon sehr unflexibel, da es local_root = / var / www / $ USER erzwingt. Es erlaubt mir nicht, ein einzelnes Verzeichnis für einen oder mehrere Benutzer anzugeben. Dieses Verzeichnis hat normalerweise je nach Client einen anderen Zweck und Speicherort. Vielen Dank für die Antwort.
Avenyet
0

Ja, Sie können aus Gründen der Flexibilität ein Verzeichnis und eine Datei mkdir /var/www/userconfsfür die Benutzerkonfiguration erstellen oder den Namen der Benutzerkonfiguration ändern und dann eine bestimmte Datei erstellen

vi /var/www/userconfigs/ftpuseraccount

inside type local_root=/var/www(oder was auch immer du von dir aus erreichen willst) guest_username=www-data(der Ubuntu-Besitzer der Datei top edit

Nach dem Update musst du vsftpd.conf hinzufügen user_config_dir=/var/www/userconfigs(oder was auch immer du ersetzt hast, dieses Konto greift auf das angegebene Verzeichnis zu).

Agunbiade Bolaji
quelle