Fehlermeldung "500 OOPS: vsftpd: Ausführung mit beschreibbarem Stammverzeichnis in chroot () verweigert" - Benutzer im Gefängnis lassen

19

Bisher war es mir nicht möglich, einen FTP-Benutzer in sein Website-Verzeichnis einzusperren. Gibt es eine Lösung, die diesen Fehler behebt und den Benutzer in seinem Verzeichnis einsperrt?

Meine vsFTPd-Einstellungen, die ich geändert habe:

listen_port=9000
Set: anonymous_enable=NO
Uncomment: local_enable=YES
Uncomment: write_enable=YES
Uncomment: local_umask=022
Set: connect_from_port_20=NO
Uncomment: idle_session_timeout=600
Uncomment: data_connection_timeout=120
Comment out: #ftpd_banner=Welcome to blah FTP service. [should be on line 104]
Added: banner_file=/etc/issue.net
Uncomment: chroot_local_user=YES
Uncomment: chroot_local_user=YES
Uncomment: chroot_list_enable=YES
Uncomment : chroot_list_file=/etc/vsftpd.chroot_list

Am Ende der Datei habe ich hinzugefügt:

# Show hidden files and the "." and ".." folders.
# Useful to not write over hidden files:
force_dot_files=YES

# Hide the info about the owner (user and group) of the files.
hide_ids=YES

# Connection limit for each IP address:
max_per_ip=10

# Maximum number of clients:
max_clients=5

# FTP Passive Settings
pasv_enable=YES
#If your listen_port is 9000 set this range to 7500 and 8500
pasv_min_port=[port range min]
pasv_max_port=[port range max]

Der betreffende Benutzer mybloguserbefindet sich in seinem / ihrem Website-Verzeichnis unter /srv/www/myblogund dieser Benutzer ist nicht Teil der nano /etc/vsftpd.chroot_listDatei. Das Ausgangsverzeichnis des Benutzers war auch /srv/www/myblogdasjenige, das in der Vergangenheit verwendet wurde.

Ich habe die allow_writeable_chroot=YESLösung ausprobiert , die nicht funktionierte, und tatsächlich vsFTPd komplett kaputt gemacht.

Ich habe versucht:

Wie können wir beide diesen Fehler beheben und den Benutzer in seinem Home-Verzeichnis inhaftieren?

Chris Hough
quelle
Irgendwie für mich zumindest mit „virtuellem“ ftp Benutzer, gerade hinzufügen , die Einstellung allow_writeable_chroot=YESwar genug und tatsächlich gearbeitet FWIW „wie erwartet“ ...
rogerdpack

Antworten:

18

Für VSFTPD 3

  1. Gehe zu: /etc/vsftpd.conf
  2. und füge dies hinzu:

    allow_writeable_chroot=YES
    

    Fügen Sie es einfach hinzu, wenn es noch nicht existiert.

  3. Starten Sie den vsftpd-Dienst neu:

    service vsftpd restart
    

Und es sollte funktionieren.

Carlos Sura
quelle
3
Der Fragesteller gibt tatsächlich an, dass er dies bereits versucht hat und es nicht funktioniert hat. Daher ist dies keine Antwort auf seine Frage.
Requist
2
Wo kann ich über die Sicherheitsauswirkungen dieser Auswahl lesen?
Flickerfly
arbeitete für mich (dies wurde auch im Kommentar der akzeptierten Antwort erwähnt)
Sverre
16

Die eigentliche Lösung dieses Problems: Der Home-Ordner des Benutzers sollte nicht nur lesbar beschreibbar sein .

Wenn sich also die Benutzersite im Ordner befindet cat/example.com/http/, catmuss der Ordner chmod 555und alles in Ordnung sein.

Nikita
quelle
12
Das macht keinen Sinn. Das Benutzerverzeichnis sollte nicht beschreibbar sein ???
Kevin Bowen
6
Wie genau soll der Benutzer Dateien HOCHLADEN , wenn er nicht schreiben kann ?!
Cerin
Es funktioniert gut für ein anonymes FTP ohne Upload-Rechte, danke!
Palacsint
Recht! jetzt ist es ok
user1406691
5
Das funktioniert einwandfrei! Erstellen Sie einfach ein Zuhause für den Benutzer mit chmod 555 und erstellen Sie dann ein Zuhause für die Website (oder Websites) mit chmod 755 oder dem, den Sie benötigen: Alles funktioniert und der Benutzer hat Schreibberechtigungen.
Lucaferrario
13

Nach weiterer Überprüfung dieses Beitrags wurde in den Kommentaren ein Paket gepostet, das mein Problem behoben hat. Sie können entweder nach meinem Namen oder nach der "Marks" -Dokumentation suchen: http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ . Hier sind meine Details, wie ich das weiter korrigiert habe.

BENUTZER SIND NOCH IM HAUS VERZEICHNIS !!!

# ------------------------------------------------------------------------------
# SETUP FTP USERS --------------------------------------------------------------
# ------------------------------------------------------------------------------

# create the ftp users and lock them to the website directories
useradd -d /srv/www/[website/appname] -m [ftp user name]

# set the ftp account passwords
passwd [ftp user name]

# add the ftp users to the www-data user/group
adduser [ftp user name] www-data

# BUG FIX: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
sudo add-apt-repository ppa:thefrontiergroup/vsftpd
sudo apt-get update
sudo apt-get install vsftpd

# Edit the vsftpd.conf and append this setting to the end of the file to keep users' jailed!
nano /etc/vsftpd.conf

# add all of the text between the starting [[ and ending ]]
# [[

# Keep non-chroot listed users jailed
allow_writeable_chroot=YES

# ]]

# restart the service for changes to take effect
sudo service vsftpd restart

#test ftp via secondary terminal window:
ftp [ftp user name]@[server ipaddress] [ftp port]
Chris Hough
quelle
11
Bitte beachten Sie: Mit der Lösung von Chris wird ein Paket-Server eines Drittanbieters zu Ihrer Repository-Liste hinzugefügt! Warum einen sicheren FTP-Server mit Chroot installieren, wenn Sie blindlings fremde Softwarepakete akzeptieren, die auf Ihrem System installiert werden sollen? (Chris: Ich glaube nicht , dass Sie die Vorteile nehmen, aber mit dieser Lösung IMHO ist schlecht sysadmining)
reto
1
Haben Sie einen besseren Ansatz, um dieses Dilemma @reto zu lösen? Es war ein kleines Durcheinander zu lösen. Danke für deine Hilfe.
Chris Hough
Wenn es ein aktualisiertes Paket aus der Distribution gibt, würde ich versuchen, das zu verwenden. Die meisten Distributionen bieten Backports für ältere Releases. Wenn das nicht möglich ist, würde ich den Quellcode vom ursprünglichen Entwickler erhalten und ihn selbst erstellen. Wenn ein Patch herumschwebt, kann ich ihn anwenden (normalerweise sind sie klein und können manuell überprüft werden).
6.
Dieser Thread hat 12'000 Aufrufe. Nehmen wir an, dass 5% Ihre Lösung verwenden und Ihr Repo hinzugefügt haben. Sie können problemlos eine neue Version eines Kernpakets mit integrierter Hintertür hinzufügen. Innerhalb einer Woche könnten Sie Zugriff auf 600 Systeme haben. Ich glaube nicht, dass Sie das tun würden, aber das Hinzufügen von Repos von Drittanbietern ist einfach nicht sehr sicher.
6.
1
Ich musste kein Update von Repo durchführen. Für mich hat das Hinzufügen der Zeile "allow_writeable_chroot = YES" den Fehler
behoben
7

Laut der vorherigen Antwort "Die WIRKLICHE Lösung dieses Problems: Der Home-Ordner des Benutzers sollte nicht nur lesbar sein.". Das allgemeine Denken ist richtig, aber mit einer falschen Erkenntnis.

Im Folgenden werde ich versuchen, ein einfaches Beispiel zu geben:

Zunächst müssen wir eine Topologie des Benutzerverzeichnisses erstellen:

 / home (ro)
   | -someuser (rw, 700)
         | -ftp_upload (ro, 555) - ch_rooting hier, schreibgeschützt von vsftpd erforderlich :(
           | -temp (rw, 755)
           | -in_box (rw, 755)
           | -out_box (rw, 755)

vsftpd.conf schneiden:

# Aktivieren Sie das Chrooting
chroot_local_user = YES

# chroot alle Benutzer mit Ausnahme der in chroot_list empfangenen Benutzer
chroot_list_enable = YES

# Ausnahmeliste. Idealerweise sollte es leer sein;)
chroot_list_file = / etc / vsftpd / chroot_list

# Ordne das FTP-Stammverzeichnis einem bestimmten Verzeichnis zu
local_root = / home / someuser / ftp

Diese Konfiguration eignet sich hervorragend für eine Einzelbenutzerkonfiguration . Für Mehrbenutzer sollte zusätzlich die Direktive "user_config_dir" verwendet werden.

** UPDATE 20/09

------ **

Hier ist eine knifflige Problemumgehung, die nicht unbedingt zu verwenden ist, aber ... Wenn Sie einen beschreibbaren FTP-Stammordner benötigen, fügen Sie einfach Berechtigungsänderungsbefehle in die Befehle vor und nach dem Start ein.

  1. Pre-Start - Ändern Sie die Berechtigungen in "Nur Lesen", was der Server benötigt (:

  2. Starten Sie den Server

  3. Nach dem Start - Ändern Sie die Berechtigung in "Lesen / Schreiben", oder die Sie benötigen.

Reishin
quelle
Ich habe viele Variationen ausprobiert, konnte es aber für einen WP-Server nicht zum Laufen bringen. Funktioniert dies für Sie in einer WP-Konfiguration?
Chris Hough
Schauen Sie in den Update-Bereich, mauby diese Variante kann Ihnen helfen, es ist nicht ganz sicher, aber wenn keine anderen Möglichkeiten ...
Reishin
1

Es ist so ziemlich das, was toastboy70 erwähnt hat. Machen Sie ftp-root zum Verzeichnis ftp.ftp und nicht beschreibbar (/etc/vsftpd.conf): anon_root = / srv / ftp

Erstellen Sie dann ein beschreibbares untergeordnetes Verzeichnis: / srv / ftp / upload

AsifHaswarey
quelle
0

Ich musste der Datei /etc/vsftpd.conf auch Folgendes hinzufügen:

seccomp_sandbox=NO

UND keine Notwendigkeit für die benutzerdefinierte Repo!

Und kommentiere die Zeile aus:

write_enable=YES
Muffinmann
quelle
0

Die einfache Lösung ist, wie in der Fehlermeldung angegeben, Folgendes zu tun: Machen Sie den Root-Ordner nicht beschreibbar, und erstellen Sie ein Unterverzeichnis mit Schreibberechtigung, wenn Sie Uploads aktivieren müssen. Keine Konfigurationsänderungen notwendig.

toastboy70
quelle
0

Nach 3 Stunden googeln bin ich auf Ubuntu 14.04.2 LTS VSFTPd 3 gelandet. Der Home-Ordner wird sichtbar / home / vimal, sobald ein Client auf ihn zugreift. Ich habe mich mit Root-Rechten bei vimal angemeldet. Ich habe einen ftpShare-Ordner angelegt, aber er hat nicht viel Bedeutung.

sudo chown vimal:vimal /home/vimal/ftpShare/

einige nützliche Befehle:

sudo nano /etc/vsftpd.conf
sudo service vsftpd restart
sudo apt-get purge vsftpd
netstat -a | grep ftp
tcp        0        0        *:ftp         *:*        LISTEN
ftp://12.345.23.xxx/  for browser login

Oben bedeutet, dass der FTP-Daemon funktioniert

Ich habe folgende Konfiguration:

seccomp_sandbox=no
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
chroot_list_enable=NO
secure_chroot_dir=/var/run/vsftpd/empty
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
allow_writeable_chroot=YES

Sobald FTP funktioniert, können Sie es weiter auf bestimmte Bedürfnisse abstimmen. Einige der obigen Werte haben Standardwerte, aber ich erinnere mich nicht genau.

Fehler im FTP-Client:

1. 500 OOPS: prctl PR_SET_SECCOMP ist fehlgeschlagen

Lösung.

seccomp_sandbox=no    

[Fügen Sie es in der ersten Zeile vsftpd.conf hinzu, nachdem der erste kommentierte Abschnitt endet.]

2. 500 OOPS: vsftpd: weigert sich, mit beschreibbarer Wurzel in chroot () zu laufen

allow_writeable_chroot=YES

Ich habe es in der letzten Zeile hinzugefügt.

Vimal Krishna
quelle
0

Ich habe das Problem gelöst, dass vsFTPd sich weigert, mit einem beschreibbaren Stammverzeichnis in chroot () auf meinem Ubuntu-Server ausgeführt zu werden:

Ich habe gerade die folgende Zeile in die vsftpd.confDatei eingefügt :

allow_writeable_chroot=YES
Somnath Das
quelle