vsftpd: 500 OOPS: сбой prctl PR_SET_SECCOMP

У меня проблема с vsftpd, Когда я подключаюсь к своему FTP-серверу через FileZilla, я получаю сообщение об ошибке:

500 OOPS: prctl PR_SET_SECCOMP не удалось
Ошибка: критическая ошибка
Ошибка: не удалось подключиться к серверу

Я пытался подключиться через мой файловый менеджер, но он не работает. Я могу подключиться ко всем другим серверам без проблем, поэтому я уверен, что это проблема, связанная с сервером.

Я запускаю Ubuntu 14.04 на VPSDime VPS. vsftpd версия 3.0.2, Ошибка не произошла после обновления или изменения конфигурации, но ошибка начала возникать, когда я работал на веб-сайте; до того как я получил ошибку, все работало нормально.

Я перезагрузил, перезагрузил vsftpd и обновил мою систему. Есть идеи?

3 ответа

Решение

Сообщение указывает, что prctl(PR_SET_SECCOMP, ...) звонок не удался.

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

Это может произойти, когда ваше ядро ​​не имеет CONFIG_SECCOMP_FILTER включен. Но это вряд ли изменится, пока вы "работаете над сайтом".

Цитата из prctl справочная страница:

PR_SET_SECCOMP (начиная с Linux 2.6.23)

Установите режим защищенных вычислений (seccomp) для вызывающего потока, чтобы ограничить доступные системные вызовы. Режим seccomp выбирается с помощью arg2, (Константы seccomp определены в <linux/seccomp.h>

...

С arg2 установлен в SECCOMP_MODE_FILTER (начиная с Linux 3.5) разрешенные системные вызовы определяются указателем на пакетный фильтр Berkeley, передаваемый в arg3. Этот аргумент является указателем на struct sock_fprog; он может быть разработан для фильтрации произвольных системных вызовов и аргументов системных вызовов. Этот режим доступен только если ядро ​​настроено с CONFIG_SECCOMP_FILTER включен.


Как плохой обходной путь, вы можете настроить vsftpd, чтобы он не включал режим seccomp.

Использовать seccomp_sandbox=no вариант в vsftpd.conf,

Опция, кажется, не документирована.

Response:    500 OOPS: vsftpd: refusing to run with writable root inside chroot()

Ошибка "500 OOPS", возвращаемая vsftpd, является мерой безопасности, разработанной для предотвращения доступного для записи корневого доступа для пользователей FTP по умолчанию. Для решения этой проблемы есть два основных варианта.

Разрешение доступного для записи доступа пользователя-root

Самый простой способ - еще раз изменить файл /etc/vsftpd.conf и включить один конкретный параметр:

nano /etc/vsftpd.conf

Отредактируйте файл так, чтобы он выглядел следующим образом:

# 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

Причиной, по которой эта ошибка из vfstpd возникает в некоторых ядрах Linux (особенно в RHEL/Centos 6.x начиная с версии 6.5), является следующее предположение в источниках 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 также поддерживает PR_SET_SECCOMP режим 2.

vsftpd молча игнорирует EINVAL от первого prctl (), но завершается неудачно с показанным сообщением об ошибке на втором.

Упомянутый выше параметр конфигурации Martin Prikryl просто заставляет его корректно завершить работу сразу после (теперь уже успешно) первого prctl (), в то время как до / на старых ядрах он чисто / тихо завершал работу при этом вызове.

Другие вопросы по тегам