web-dev-qa-db-ja.com

vsftpd:500 OOPS:prctl PR_SET_SECCOMPが失敗しました

vsftpdに問題があります。 FileZillaを介してFTPサーバーに接続すると、エラーが発生します。

500 OOPS:prctl PR_SET_SECCOMPが失敗しました
エラー:重大なエラー
エラー:サーバーに接続できませんでした

私もファイルマネージャー経由で接続しようとしましたが、機能していないようです。他のすべてのサーバーに問題なく接続できるので、サーバーに関連する問題であると確信しています。

Ubuntu 14.04をVPSDime VPSで実行しています。 vsftpdバージョン3.0.2。エラーは、更新または構成の変更後には発生しませんでしたが、Webサイトで作業していたときにエラーが発生し始めました。エラーが発生する前に問題なく動作していました。

再起動してvsftpdを再起動し、システムを更新しました。何か案は?

8
Xweque

メッセージは、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 man page からの引用:

PR_SET_SECCOMP(Linux 2.6.23以降)

呼び出しスレッドにセキュアコンピューティング(seccomp)モードを設定して、使用可能なシステムコールを制限します。 seccompモードはarg2によって選択されます。 (seccomp定数は<linux/seccomp.h>

...

arg2SECCOMP_MODE_FILTERに設定すると(Linux 3.5以降)、許可されるシステムコールは、arg3で渡されるBerkeley Packet Filterへのポインターによって定義されます。この引数はstruct sock_fprogへのポインターです。任意のシステムコールとシステムコール引数をフィルタリングするように設計できます。 このモードは、カーネルがCONFIG_SECCOMP_FILTERを有効にして構成されている場合にのみ使用できます。


不十分な回避策として、 seccompモード を有効にしないようにvsftpdを設定できます。

seccomp_sandbox=novsftpd.confオプションを使用します。

オプションは文書化されていないようです。

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

「500 OOPS」エラーvsftpdは、デフォルトでFTPユーザーの書き込み可能なルートアクセスを防ぐように設計されたセキュリティ対策です。この問題を解決するには、2つの主要なオプションを利用できます。

書き込み可能なユーザールートアクセスの許可

最も簡単な方法は、/ etc/vsftpd.confファイルをもう一度変更し、特定の設定を1つ有効にすることです。

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

0
MaXiM

一部のLinuxカーネル(特に6.5以降のRHEL/Centos 6.x)で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_PRIVSPR_SET_SECCOMPモード2もサポートしています。</ code>

vsftpdは最初のprctl()からのEINVALを警告なしで無視しますが、2番目に表示されたエラーメッセージで失敗します。

上記の構成パラメータMartin Prikrylは、(現在は成功した)最初のprctl()の直後にクリーンに終了するだけですが、古いカーネルの前/では、その呼び出しでクリーンに/サイレントに終了します。

0
FrankH.