我遇到了问题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