Dlaczego zostaję wyrzucony z sesji FTP po uruchomieniu polecenia?

12

Dlaczego zostaję wyrzucony z sesji FTP po uruchomieniu polecenia? Wygląda na to, że po pomyślnym zalogowaniu się na serwerze pojawia się następujący komunikat po uruchomieniu polecenia, takiego jak „ls” (część błędu zawarłem w tagach „[ERROR]”):

allen92@allen92-VirtualBox:~/Videos$ ftp -n ftp.FreeBSD.org
Connected to ftp.FreeBSD.org.
220 beastie.tdk.net FTP server (Version 6.00LS) ready.
ftp> user
(username) anonymous
331 Guest login ok, send your email address as password.
Password: 
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
[ERROR]
421 Service not available, remote server has closed connection
[ERROR]
ftp> 

Wydaje się, że dzieje się tak na dowolnym zdalnym serwerze FTP. Wszystko działa dobrze, gdy loguję się na komputerze lokalnym i uruchamiam polecenia FTP. Jeśli w rzeczywistości błąd „421” jest błędem ogólnym, czy jest jakiś sposób na znalezienie źródła problemu? Wszelkie uwagi w tym zakresie będą mile widziane. Nie udało mi się znaleźć wsparcia w tej konkretnej sprawie. Każdy, kto ma podobny problem, podziel się swoimi przemyśleniami.

UWAGA: Mam zainstalowany VSFTPD .

AllenD
źródło

Odpowiedzi:

13

Najprawdopodobniej między tobą a serwerami występuje zapora NAT. (Zapory sieciowe NAT ukrywają całą sieć za jednym numerem IP).

Problem polega na tym, że FTP chce wysłać dane wynikające z komendy w nowym, oddzielne połączenia TCP / IP i że nie może przejść przez zaporę, ponieważ musi przejść z serwera do ciebie, a ty są ukryte za zaporą, która ma nie ma pojęcia, że ​​dane są przeznaczone dla twojej maszyny. Kiedy zaprojektowano protokół FTP, wiele nowoczesnych urządzeń, takich jak router NAT (które stały się niezbędne, gdy było więcej urządzeń niż dostępnych adresów IP), nie zostało jeszcze wynalezionych.

Użyj pasvpolecenia (może być nazywane w kliencie czymś innym), aby przejść do połączenia pasywnego, w którym połączenia danych przechodzą od Ciebie do serwera.

Zobacz http://slacksite.com/other/ftp.html o bardziej szczegółowe wyjaśnienie.

Thorbjørn Ravn Andersen
źródło
Wielkie dzięki. W przypadku VSFTPD polecenie przejścia w tryb pasywny to „pasywny”. To wydaje się na razie działać. Myślę, że cała ta sytuacja ma związek ze mną, gdy uruchamiam instalację Linuksa na maszynie wirtualnej i jej niestandardowe ustawienia. Dowiem się, jak domyślnie włączyć tryb „pasywny”. Gdy się dowiem, opublikuję posty dla wszystkich zainteresowanych.
AllenD
Często zdarza się, że domyślną siecią dla maszyn wirtualnych jest jakiś NAT, więc maszyna nie jest narażona. W przypadku VirtualBox zmiana na Bridged sprawia, że ​​wyświetla się jak każda inna maszyna w sieci lokalnej.
Thorbjørn Ravn Andersen
0

Dodaj lub włącz tę linię w /etc/vsftpd.conf

seccomp_sandbox = NIE

Andrej Sevčnikar
źródło
Ta odpowiedź rozwiązała mój problem, ale nadal mam pytania dotyczące tej nieudokumentowanej konfiguracji.
A1rPun
Dlaczego seccomp_sandbox=NOwłaściwa odpowiedź w pewnych okolicznościach jest udokumentowana w /etc/vsftpd.confpliku: `` # seccomp_sanbox dodaj dodatkową warstwę bezpieczeństwa ograniczającą liczbę # wywołań systemowych, które można wykonać poprzez vsftpd. Może się jednak zdarzyć, że # biała lista nie zezwala na prawidłowe połączenie (zwykle pośrednio uruchamiane przez # bibliotekę innej firmy, taką jak pam lub openssl), a proces jest zabijany przez jądro. # # Dlatego jeśli twój serwer ginie w typowych sytuacjach (pobieranie pliku, przesyłanie), # odkomentuje następujący wiersz i nie zapomnij otworzyć błędu na # bugzilla.novell.com se
GSchukat