Linux

ubuntu ftp 500 OOPS:prctl PR_SET_SECCOMP 失敗

  • March 3, 2017

我剛剛在我的 ubuntu 14 伺服器中安裝了 vsftp。我也使用sudo apt-get install命令安裝了 vsftp。然後重新啟動 ftp 伺服器,但它拒絕此錯誤500 OOPS: prctl PR_SET_SECCOMP failed 的所有連接,請看這裡。

aysael@srv:~$ sudo ftp
ftp> open 127.0.0.1
Connected to 127.0.0.1.
500 OOPS: prctl PR_SET_SECCOMP failed

這是我的配置文件/etc/vsftpd.conf

seccomp_sandbox=no
listen=YES
# Allow anonymous FTP? (Disabled by default)
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
dirmessage_enable=YES
#
# If enabled, vsftpd will display directory listings with the time
# in  your  local  time  zone.  The default is to display GMT. The
# times returned by the MDTM FTP command are also affected by this
# option.
use_localtime=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
ftpd_banner=Welcome to blah FTP service.

secure_chroot_dir=/var/run/vsftpd/empty
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# This option specifies the location of the RSA key to use for SSL
# encrypted connections.
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

該消息指示prctl(PR_SET_SECCOMP, ...)呼叫失敗。

if (!tunable_seccomp_sandbox)
{
 return;
}

...

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_FILTERLinux 3.5 開始)允許的系統呼叫由指向 arg3 中傳遞的伯克利包過濾器的指針定義。這個參數是一個指向struct sock_fprog; 它可以設計為過濾任意系統呼叫和系統呼叫參數。僅當核心配置為CONFIG_SECCOMP_FILTER啟用時,此模式才可用。


您應該能夠通過將 vsftpd 配置為不啟用seccomp 模式來解決此問題。

使用 中的seccomp_sandbox=no選項vsftpd.conf

該選項似乎沒有記錄。

但你似乎已經有了那套。這可能表明您vsftpd.conf實際上沒有被使用。或者您設置選項後沒有重新啟動 vsftpd。

如果您確實設置了該選項,則您永遠不會收到錯誤消息,正如您在上面的程式碼片段中看到的那樣(您的 vsftpd 3.0.2 的程式碼)。

引用自:https://serverfault.com/questions/695348