vsftpd: 500 OOPS: prctl PR_SET_SECCOMP nie powiodło się

8

Mam problem z vsftpd. Kiedy łączę się z moim serwerem FTP przez FileZilla, pojawia się błąd:

500 OOPS: prctl PR_SET_SECCOMP nie powiodło się
Błąd: Błąd krytyczny
Błąd: Nie można połączyć się z serwerem

Próbowałem również połączyć się za pośrednictwem mojego menedżera plików i wydaje się, że nie działa. Mogę połączyć się ze wszystkimi innymi serwerami bez problemu, więc jestem pewien, że jest to problem związany z serwerem.

Używam Ubuntu 14.04 na VPSDime VPS. vsftpdwersja 3.0.2. Błąd nie pojawił się po aktualizacji lub zmianie konfiguracji, ale błąd zaczął występować, gdy pracowałem na stronie internetowej; działało dobrze, zanim dostałem błąd.

Uruchomiłem ponownie, zrestartowałem vsftpdi zaktualizowałem swój system. Jakieś pomysły?

Xweque
źródło

Odpowiedzi:

17

Komunikat wskazuje, że prctl(PR_SET_SECCOMP, ...)połączenie nie powiodło się.

ret = prctl(PR_SET_SECCOMP, 2, &prog, 0, 0);
if (ret != 0)
{
  die("prctl PR_SET_SECCOMP failed");
}

Może się to zdarzyć, gdy twoje jądro nie ma CONFIG_SECCOMP_FILTERwłączonego. Ale to nie może się zmienić podczas „pracy na stronie internetowej”.

Cytat ze prctlstrony man :

PR_SET_SECCOMP (od Linuksa 2.6.23)

Ustaw tryb bezpiecznego przetwarzania (seccomp) dla wątku wywołującego, aby ograniczyć dostępne wywołania systemowe. Tryb seccomp wybiera się za pomocą arg2. (Stałe seccomp są zdefiniowane w<linux/seccomp.h>

...

Przy arg2ustawieniu na SECCOMP_MODE_FILTER(od Linuksa 3.5) dozwolone wywołania systemowe są definiowane przez wskaźnik do filtru pakietów Berkeley przekazywanego w arg3. Ten argument jest wskaźnikiem do struct sock_fprog; może być zaprojektowany do filtrowania dowolnych wywołań systemowych i argumentów wywołań systemowych. Ten tryb jest dostępny tylko wtedy, gdy jądro jest skonfigurowane z CONFIG_SECCOMP_FILTERwłączoną funkcją.


Jako słabe obejście można skonfigurować vsftpd, aby nie włączał trybu seccomp .

Użyj seccomp_sandbox=noopcji w vsftpd.conf.

Ta opcja nie wydaje się być udokumentowana.

Martin Prikryl
źródło
Dzięki, że zadziałało. Czy wiesz, czy może to powodować komplikacje? Co to jest seccomp?
Xweque
Zobacz en.wikipedia.org/wiki/Seccomp
Martin Prikryl
2
Dzięki, to też zadziałało dla mnie. Zastanawiam się, dlaczego nagle mam taki problem. Używam zwirtualizowanego serwera OVH z Ubuntu 14.04 i jądrem 2.6.32.
Miguel El Merendero,
Miałem dokładnie ten sam problem, taką samą konfigurację jak @MiguelElMerendero i to rozwiązało. Wielkie dzięki!
Bigood,
0

Powodem, dla którego ten błąd z vfstpd występuje w niektórych jądrach Linuksa (w szczególności RHEL / Centos 6.x od wersji 6.5) jest następujące założenie w źródłach vsftpd,

https://github.com/dagwieers/vsftpd/blob/master/seccompsandbox.c#L642


  ret = prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
  if (ret != 0)
  {
    if (errno == EINVAL)
    {
      /* Kernel isn't good enough. */
      return;
    }
    die("prctl PR_SET_NO_NEW_PRIVS");
  }

  if (!tunable_seccomp_sandbox)
  {
    return;
  }
[ ... ]
  ret = prctl(PR_SET_SECCOMP, 2, &prog, 0, 0);
  if (ret != 0)
  {
    die("prctl PR_SET_SECCOMP failed");
}

With https://rhn.redhat.com/errata/RHSA-2015-0864.html Redhat added:

Note: the fix for this issue is the kernel part of the overall fix, and introduces the PR_SET_NO_NEW_PRIVS functionality and the related SELinux exec transitions support.

This breaks vsftpd's assumption above that any kernel which supports PR_SET_NO_NEW_PRIVS also supports PR_SET_SECCOMP mode 2.

vsftpd silently ignores the EINVAL from the first prctl() but fails with the shown error message on the second.

The configuration parameter Martin Prikryl mentioned above is merely making it exit cleanly just after the (now-successful) first prctl(), podczas gdy przed / na starszych jądrach, czysto / cicho wyszedł z tego wywołania.

FrankH.
źródło
0
Response:    500 OOPS: vsftpd: refusing to run with writable root inside chroot()

Błąd „500 OOPS” zwracany przez vsftpd jest środkiem bezpieczeństwa zaprojektowanym tak, aby domyślnie uniemożliwić zapisywanie dostępu do konta root użytkownikom FTP. Aby rozwiązać ten problem, dostępne są dwie główne opcje.

Zezwalanie na zapisowy dostęp użytkownika root

Najprostszą metodą jest zmiana pliku /etc/vsftpd.conf jeszcze raz i włączenie jednego konkretnego ustawienia:

nano /etc/vsftpd.conf

Edytuj plik, aby był podobny do następującego:

# Allow users to write to their root directory
allow_writeable_chroot=YES

https://uk.godaddy.com/help/how-to-set-up-an-ftp-server-on-ubuntu-1404-12301

Maksyma
źródło