vsftpd:500 OOPS:prctl PR_SET_SECCOMP 失败

vsftpd:500 OOPS:prctl PR_SET_SECCOMP 失败

我遇到了问题vsftpd。当我通过 FileZilla 连接到我的 FTP 服务器时,我收到以下错误:

500 OOPS:prctl PR_SET_SECCOMP 失败
错误:严重错误
错误:无法连接到服务器

我也尝试过通过文件管理器进行连接,但似乎不起作用。我可以毫无问题地连接到所有其他服务器,所以我确定这是与服务器相关的问题。

我在 VPSDime VPS 上运行 Ubuntu 14.04。vsftpd版本3.0.2。更新或更改配置后没有发生错误,但当我在网站上工作时开始发生错误;在我收到错误之前它运行良好。

我已经重启vsftpd并更新了系统。有什么想法吗?

答案1

该消息表明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手册页

设定安全组件(自 Linux 2.6.23 起)

设置调用线程的安全计算 (seccomp) 模式,以限制可用的系统调用。seccomp 模式通过 选择arg2。(seccomp 常量在<linux/seccomp.h>

...

arg2设置为(SECCOMP_MODE_FILTER自 Linux 3.5 起) 时,允许的系统调用由传入 arg3 的 Berkeley 数据包过滤器指针定义。此参数是指向 的指针struct sock_fprog;它可以被设计为过滤任意系统调用和系统调用参数。仅当内核配置为CONFIG_SECCOMP_FILTER启用时,此模式才可用。


作为一个糟糕的解决方法,你可以配置 vsftpd 不启用seccomp 模式

使用seccomp_sandbox=no中的选项vsftpd.conf

该选项似乎没有记录。

答案2

某些 Linux 内核(最明显的是 RHEL/Centos 6.x 6.5 及以上版本)中会出现 vfstpd 的此错误,原因是 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(),而在旧内核之前/上,它会干净/静默地退出该调用。

答案3

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

vsftpd 返回的“500 OOPS”错误是一种安全措施,旨在默认阻止 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

相关内容