동일한 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와 사용자 정의 셸만 실패했습니다. 둘 다 주식 배분(Devuan Beowulf)의 일부가 아니었지만 그것이 실패를 설명하지는 않습니까?

이전 68 버전이고 오류가 수정되었거나 다음 설치 시 자동으로 사라질 수 있으므로 Thunderbird에 오류를 보고할 필요가 없습니다. 물론, 무엇이 문제인지 정확히 알지 못한다면 신고할 수 없습니다. 액세스가 거부되고 허용되는 이유를 이해할 수 없습니다.

  • 동일한 사용자 ID/세션으로 Thunderbird와 Scarecrow를 실행하고 있습니다.
  • Thunderbird가 trace=setuid,setfsuid,setreuid.
  • x비트는 해당 경로의 모든 부분에서 켜집니다.
  • 저는 ACL을 사용해 본 적이 없습니다.

편집: 매뉴얼 페이지에는 execve네 가지 가능한 이유가 나열되어 있습니다.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

이는 Thunderbird libglib2.0-0:amd64가 아닌 Thunderbird의 일부입니다.

그래도 썬더버드가 겪은 실패를 재현할 수는 없었다.

Edit2: libc6에 대한 사례를 양 당사자에게 제출독일어 오류 497그리고데비안 버그 966343

답변1

이것은 이론이 아니라 결론적인 답변입니다 ...

허가를 거부하는 다른 이유가 있습니다. 떠오르는 것 중 하나는갑옷을 적용. 이것이 배포판의 Thunderbird에 영향을 미치는지 확인하지 않았습니다. 프로그램 접근이 차단되면 시스템 로그에 기록되어야 하므로 이를 확인하세요 /var/log/syslog.

AppArmor는 프로그램별로 구성되고 기본적으로 알 수 없는 프로그램이 원하는 작업을 수행할 수 있도록 하므로 문제를 명확하게 설명합니다. 천둥새가능한다른 프로그램(OpenOffice) 실행을 방지하는 AppArmor 프로필이 있습니다. 귀하의 테스트 프로그램에는 그러한 구성 파일이 없습니다.

관련 정보