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 (), в то время как до / на старых ядрах он чисто / тихо завершал работу при этом вызове.