systemd problema de permissão com o usuário root

3

Estou tentando configurar o hylafax + no fedora, seja com o arquivo rpm ou pelo código-fonte. hylafax + não está preparado para systemd, então eu escrevi i.a. o seguinte arquivo "/etc/systemd/system/hylafax-faxgetty-ttyACM0.service", que funciona bem no Ubuntu e no Opensuse:

[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

mas me dá o erro " Não é possível configurar permissões (uid) " no fedora. Quando eu corro o código:

/usr/sbin/faxgetty -D ttyACM0

manualmente como root, parece ser executado (o processo persiste).

Eu encontrei o único local onde a mensagem de erro é produzida no código-fonte do hylafax + e o modifiquei ligeiramente para ser mais informativo, assim:

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);
        }

Agora, isso me dá:

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

As respectivas entradas dos meus arquivos de senha: / etc / passwd:

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

/ etc / group:

uucp:x:10:uucp

Alguém pode me dizer o que pode estar errado?

    
por Gerald Schade 05.09.2016 / 02:48

2 respostas

1

De sua saída, parece que está acontecendo o seguinte:

  • Seu aplicativo está sendo executado como root.
  • É capaz de mudar grupos para um grupo com menor privilégio
  • Ele está tentando mudar para um usuário com privilégios mais baixos, mas está falhando.

Primeiro, seteuid como o conjunto de syscalls define o errno que informará o erro real. É melhor imprimir isso como parte de sua mensagem de erro para obter o motivo real da falha.

No entanto, é mais provável que seja um erro de permissão. Erros de permissão, tanto quanto você pode dizer que eles têm permissão para fazer a ação (que é estranho como root, uma vez que eles deveriam ser capazes de fazer qualquer coisa) é uma indicação de que o selinux (ou serviço semelhante como apparmour) está funcionando. Eles são os únicos serviços que eu conheço que podem bloquear o usuário root de alguma ação.

A maneira mais rápida de saber se o selinux está errado (não estou tão familiarizado com o apparmour) é verificar se ele está ligado (isto é, "forçando")

sestatus

e, em seguida, verificar negações de avc no log de auditoria

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

Se isso retornar alguma coisa, o selinux está bloqueando alguma coisa. Você pode provar que é selinux definindo temporariamente ti como permissivo com o seguinte

sudo setenforce 0

Se você agora é capaz de fazer o que você precisa, então é definitivamente selinux. Você tem duas opções agora; permanentemente definido o selinux como permissivo reduzindo a segurança do seu sistema (desencorajado) ou gerando as regras exigidas pelo seu aplicativo .

    
por 06.09.2016 / 11:22
0

Você deve deixar o User=root e Group=root fora do seu arquivo de serviço. Estes são desnecessários para processos que são iniciados como um serviço do sistema (eles começam como root já) e provavelmente estão causando problemas no seu processo para outro euid.

    
por 05.09.2016 / 09:25