同じexecveが原因で、あるプログラムでは「権限の拒否」が発生しますが、他のプログラムではそうではありません。

同じexecveが原因で、あるプログラムでは「権限の拒否」が発生しますが、他のプログラムではそうではありません。

Thunderbirdで特定の添付ファイルを開こうとすると、権限が拒否されました。ただし、straceプロセスを操作するときに正しい呼び出しを行うことがわかったので、Thunderbirdのバグのようには見えません。しかし、それは失敗しました。

11545 execve("/usr/local/bin/libreoffice6.4", ["libreoffice6.4", "--writer", "file:///tmp/user/1000/via%20alla%20quite%2012%20Laigueglia"], ["SHELL=/bin/bash", "WINDOWID=18874383", "QT_ACCESSIBILITY=1", "XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0", "XTERM_VERSION=XTerm(344)", ... ]) = -1 EACCES (Permission denied)

権限は大丈夫です。nameigetfacl。その後、execve命令をstrace -v -s 1024Cファイルにコピーしてコンパイルしました。この場合には効果がありました。 Thunderbirdでマウスクリックで実行するたびに失敗し、次のテストプログラムを実行するたびに成功します。

#include <unistd.h>
#include <stdio.h>

int main()
{
    char *path="/usr/local/bin/libreoffice6.4";
    char *argv[] =
    {
        "libreoffice6.4",
        "--writer",
        "file:///tmp/user/1000/via%20alla%20quite%2012%20Laigueglia",
        NULL
    };
    char *envp[] =
    {
        "SHELL=/bin/bash",
        "WINDOWID=18874383",
        "QT_ACCESSIBILITY=1",
        "XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0",
        "XTERM_VERSION=XTerm(344)",
        // ...
        NULL
    };
    int rtc = execve(path, argv, envp);
    perror("execve failed");
    return rtc;
}

Thunderbirdは複数の添付ファイルを正しく開くことができます。これまで、LibreOfficeとカスタムシェルだけが失敗しました。どちらも株式配分の一部ではありませんでしたが、それは失敗を説明しませんか?

以前の68バージョンで、エラーが修正されたか、次のインストール時に自動的に消える可能性があるため、Thunderbirdにエラーを報告する必要はありません。もちろん、何が問題なのかを正確に知らなければ、報告できません。アクセスが拒否され、許可される理由を理解できません。

  • 同じユーザーID /セッションでThunderbirdとScarecrowを実行しています。
  • Thunderbirdがtrace=setuid,setfsuid,setreuid
  • このxビットは、そのパスのすべての部分でオンになります。
  • 私はACLを使ったことがありません。

編集:マニュアルページにはexecve4つの考えられる理由がリストされています。EACCESS:

  • ファイル名パスプレフィックスまたはスクリプトソルバー名のコンポーネントに対する検索権限が拒否されました。
  • このファイルまたはスクリプトソルバーは通常のファイルではありません。
  • ファイル、スクリプト、またはELFインタプリタに対する実行権限が拒否されました。
  • ファイルシステムは noexec モードでマウントされます。

これらのどれも真実ではないようです。私はThunderbirdの動作を模倣するためにダミー変数thread_creationと変数を追加してStrawmanプログラムを複雑にしました。fork具体的には、次の実行可能ファイルを実行します。

-rwxr-xr-x 1 root root 14328 Nov  6  2019 /usr/lib/x86_64-linux-gnu/glib-2.0/gio-launch-desktop

これはThunderbirdlibglib2.0-0:amd64ではなくThunderbirdの一部です。

それでもサンダーバードが経験した失敗を再現することはできなかった。

Edit2:libc6のケースを両当事者に提出するドイツ語エラー497そしてDebian のバグ 966343

ベストアンサー1

これは理論ではなく結論的な答えです...

許可を拒否する他の理由があります。思い浮かぶものの一つは鎧を適用。これがディストリビューションのThunderbirdに影響を与えるかどうかを確認しませんでした。プログラムへのアクセスがブロックされたらシステムログに記録する必要があるため、これを確認してください/var/log/syslog

AppArmorは、プログラムごとに構成され、基本的に不明なプログラムが目的のタスクを実行できるようにするため、問題を明確に説明します。雷鳥可能他のプログラム(OpenOffice)の実行を防ぐAppArmorプロファイルがあります。あなたのテストプログラムにはそのような設定ファイルはありません。

おすすめ記事