acesso systemctl negado quando root

16

Quando eu corro

sudo systemctl disable avahi-daemon.socket

eu recebo

Failed to execute operation: Access denied

Mas é executado como root, como o acesso pode ser negado? (CentOS 7)

spraff
fonte
Você está executando em um contêiner, como Docker, LXC ou LXD? Você tem certeza de que está ou não em um contêiner?
allquixotic
Estou executando uma nova instalação do CentOS no VirtualBox. Isso conta como um contêiner?
spraff 16/09/16
Não, o VirtualBox não é um contêiner, é uma máquina virtual. Eles são fundamentalmente diferentes. Provavelmente você precisa correr journalctl -xepara descobrir por que isso está acontecendo.
allquixotic
1
Observe que esta mensagem de erro ("Falha ao executar a operação: acesso negado") também pode ocorrer ao tentar acessar um serviço inexistente no modo de imposição. No modo permissivo, você obteria "Falha ao executar a operação: esse arquivo ou diretório não existe".
Danmichaelo

Respostas:

23

Também trabalho no CentOS 7 e tive um problema semelhante:

# systemctl unmask tmp.mount
Failed to execute operation: Access denied

A negação tem a ver com o SELinux. Este pode ser o seu caso, se você estiver executando o SELinux no enforcingmodo:

# getenforce
Enforcing

No meu caso, o systemctlerro produziu uma USER_AVCnegação no arquivo de log do SELinux /var/log/audit/audit.log:

type=USER_AVC msg=audit(1475497680.859:2656): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='avc:  denied  { enable } for auid=0 uid=0 gid=0 path="/dev/null" cmdline="systemctl unmask tmp.mount" scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:null_device_t:s0 tclass=service  exe="/usr/lib/systemd/systemd" sauid=0 hostname=? addr=? terminal=?'

Solução

Este artigo afirma que isso ocorre devido a um erro no systemd e fornece uma solução alternativa:

systemctl daemon-reexec

Solução secundária

Se o procedimento acima não funcionou, você pode definir o modo SELinux para permissive:

setenforce 0

e deve funcionar bem. No entanto, esta segunda solução tem implicações de segurança.

Elouan Keryell-Even
fonte
Eu recebo nenhuma saída, em vez de Removed symlinke depois systemctl disable avahi-daemon.socketfalhar como antes, produzindo a mesma linha emaudit.log
spraff
Você pode tentar desativar o modo de imposição do selinux? setenforce 0
Elouan Keryell-Even
1
systemctl disable avahi-daemon.socketconsegue depois setenforce 0sem systemctl daemon-reexec(e agora percebo que unmaské seu comando, não meu :-)) Está tudo bem em fazer isso e setenforce 1depois?
spraff
@spraff Não sei, sou novato no SELinux ha ha. Eu vou mencionar setenforce 0na minha resposta então.
Elouan Keryell-Even
1
Por favor não setenforce 0. Essa é uma prática ruim no ambiente de produção. Por favor, use em seu systemctl daemon-reexeclugar.
Younes 10/10
10

No meu caso, eu tinha acabado de atualizar systemde qualquer systemctlcomando estava falhando:

# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied

No entanto, de acordo com a página de initmanual, você pode fazer o mesmo enviando SIGTERMpara o daemon em execução como o PID 1, que funcionou:

kill -TERM 1

Isso recarregou o daemon, após o qual todos os systemctlcomandos começaram a funcionar novamente.

Malvineous
fonte
1
Obrigado. Resolvi meu problema depois de atualizar uma distro do archlinux após um longo período de tempo.
buergi 31/05/19
1
trabalhou no Ubuntu 18.10 - Obrigado!
Roy Shilkrot
1

Nenhuma solução funcionou para mim. Aconteceu que havia um sinal = ausente em uma das linhas do meu arquivo .service. Descobri isso procurando / var / log / messages e vi um erro mais descritivo. Portanto, o acesso negado era enganador. Não era realmente um problema de segurança.

Jon
fonte
3
Você deve fornecer mais detalhes sobre como resolver esta questão. Por exemplo, você fala sobre uma mensagem de erro mais detalhada, mas não indica qual era exatamente a mensagem de erro. Sem essas informações, seria melhor servir como um comentário, porque esta resposta sem essas informações é incompleta.
Ramhound
qual arquivo de log mostrou a mensagem?
Rogerdpack #