루트 사용자에 대한 시스템 권한 문제

루트 사용자에 대한 시스템 권한 문제

rpm 파일이나 소스 코드를 사용하여 페도라에서 hylafax+를 설정하려고 합니다. hylafax+는 systemd에 준비되지 않았기 때문에 ubuntu 및 Opensuse에서 잘 작동하는 다음 파일 "/etc/systemd/system/hylafax-faxgetty-ttyACM0.service"를 작성했습니다.

[Unit]
Description=HylaFAX faxgetty for ttyACM0, ...

[Service]
User=root
Group=root
Restart=always
RestartSec=30
ExecStart=/usr/sbin/faxgetty ttyACM0

[Install]
WantedBy=multi-user.target

하지만 나에게 오류가 발생했습니다 "권한(uid)을 설정할 수 없습니다."Fedora에서. 코드를 실행하면:

/usr/sbin/faxgetty -D ttyACM0

루트로 수동으로 실행하면 작동하는 것 같습니다(프로세스는 여전히 존재합니다).

hylafax+의 소스 코드에서 오류 메시지가 생성된 단일 위치를 찾아 약간 수정하여 다음과 같이 더 많은 정보를 제공했습니다.

faxApp::setupPermissions(void)
{
    if (getuid() != 0)
        faxApp::fatal("The fax server must run with real uid root.\n");
    uid_t euid = geteuid();
    const passwd* pwd = getpwnam(FAX_USER);
    if (!pwd)
        faxApp::fatal("No fax user \"%s\" defined on your system!\n"
            "This software is not installed properly!", FAX_USER);
    if (euid == 0) {
        if (initgroups(pwd->pw_name, pwd->pw_gid) != 0)
            faxApp::fatal("Can not setup permissions (supplementary groups)");
        if (setegid(pwd->pw_gid) < 0)
            faxApp::fatal("Can not setup permissions (gid)");
        if (seteuid(pwd->pw_uid) < 0) {
            char buf[50];
            sprintf(buf,"Perm.for %s %d euid: %d",FAX_USER, pwd->pw_uid, euid);
//          faxApp::fatal("Can not setup permissions (uid)");
            faxApp::fatal(buf);
        }

이제 그것은 나에게 다음을 제공합니다:

FaxGetty[6359]: Perm.for uucp 10 euid: 0

내 비밀번호 파일에 해당하는 항목: /etc/passwd:

uucp:x:10:10:Facsimile Agent:/var/spool/hylafax:/bin/bash

/etc/그룹:

uucp:x:10:uucp

누구든지 무엇이 잘못되었을 수 있는지 말해 줄 수 있습니까?

답변1

출력 결과에 따르면 다음과 같은 일이 발생하는 것 같습니다.

  • 귀하의 애플리케이션이 루트로 실행 중입니다.
  • 그룹을 권한이 낮은 그룹으로 변경하는 기능이 있습니다.
  • 권한이 낮은 사용자로 전환을 시도하지만 실패합니다.

첫 번째,세트드시스템 호출에 대한 할당 설정과 같습니다.오류 번호이것은 실제 오류를 알려줍니다. 실패의 실제 원인을 알아보려면 이를 오류 메시지의 일부로 인쇄하는 것이 가장 좋습니다.

그러나 이는 권한 오류일 가능성이 높습니다. 당신이 알 수 있는 한, 권한 오류는 해당 권한이 있음을 나타내며(루트에게는 이상합니다. 무엇이든 할 수 있어야 하기 때문입니다), 이는 selinux(또는 apparmour와 같은 유사한 서비스)가 작동하고 있음을 나타냅니다. 이는 루트 사용자가 특정 작업을 수행하는 것을 방지할 수 있는 유일한 서비스입니다.

selinux에 문제가 있는지 확인하는 가장 빠른 방법(저는 의류에 대해 잘 알지 못합니다)이 켜져 있는지(예: "강제") 확인하는 것입니다.

sestatus

그런 다음 감사 로그에서 avc 거부를 확인하세요.

sudo grep avc /var/log/audit/audit.log

아무것도 반환되지 않으면 selinux가 무언가를 차단하고 있는 것입니다. 임시로 ti를 허용으로 설정하여 selinux임을 추가로 증명할 수 있습니다.

sudo setenforce 0

지금 요구 사항을 충족할 수 있다면 확실히 selinux입니다. 이제 두 가지 옵션이 있습니다.selinux를 영구적으로 관대하게 설정시스템 보안을 낮추거나(권장하지 않음)애플리케이션에 필요한 규칙 생성.

답변2

서비스 파일에 User=root및 를 유지 해야 합니다 . Group=root시스템 서비스로 시작된 프로세스(이미 루트로 시작됨)에는 필요하지 않으며 프로세스가 다른 euid로 변경되면 문제가 발생할 수 있습니다.

관련 정보