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로 변경되면 문제가 발생할 수 있습니다.