página PHP não lançar comando unix mesmo sudoers após atualizados
Pergunta
Basicamente eu estou tentando reiniciar um serviço a partir de uma página php web.
Aqui está o código:
<?php
exec ('/usr/bin/sudo /etc/init.d/portmap restart');
?>
Mas, em /var/log/httpd/error_log
, recebo
incapaz de mudar para sudoers gid: Operação não permitida
e em / var / log / messages, recebo
22 de setembro 15:01:56 ri do kernel: auditoria (1222063316,536: 777): avc: denied {getattr} para pid = 4851 comm = nome "sh" = "var" dev = dm-0 ino = 114241 scontext = root: system_r: httpd_sys_script_t tcontext = system_u: object_r: var_t tclass = dir
22 de setembro 15:01:56 núcleo ri: auditoria (1222063316,549: 778): avc: denied {setrlimit} para pid = 4851 comm = "sudo" scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = processo < br> 22 de setembro 15:01:56 núcleo ri: auditoria (1222063316,565: 779): avc: negado {} leitura para pid = 4851 comm = nome "sudo" = "sombra" dev = dm-0 ino = 379669 scontext = root: system_r : httpd_sys_script_t tcontext = system_u: object_r: shadow_t tclass = arquivo
22 de setembro 15:01:56 núcleo ri: auditoria (1222063316,568: 780): avc: negado {} leitura para pid = 4851 comm = nome "sudo" = "sombra" dev = dm-0 ino = 379669 scontext = root: system_r : httpd_sys_script_t tcontext = system_u: object_r: shadow_t tclass = arquivo
22 de setembro 15:01:56 núcleo ri: auditoria (1222063316,571: 781): avc: denied {setgid} para pid = 4851 comm = capacidade de "sudo" = 6 scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = capacidade
22 de setembro 15:01:56 núcleo ri: auditoria (1222063316,574: 782): avc: denied {setuid} para pid = 4851 comm = "sudo" capacidade = 7 scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = capacidade
22 de setembro 15:01:56 núcleo ri: auditoria (1222063316,577: 783): avc: denied {setgid} para pid = 4851 comm = capacidade de "sudo" = 6 scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = capacidade
Na minha visudo, eu adicionei as linhas
user_alias WWW = apache
WWW ALL = (ALL) NOPASSWD: ALL
Você pode por favor me ajude? Estou fazendo algo errado?
Obrigado por sua ajuda,
tiBoun
Solução
O problema não é com o sudo no momento, mas com SELinux , que é (razoavelmente ) conjunto de negar a HTTPD de ganhar privilégios de root.
Você vai precisar para permitir que seja explicitamente isso (você pode usar audit2allow para isso), ou conjunto SELinux para ser permissiva em seu lugar. Eu sugiro que o primeiro.
Outras dicas
O erro que você está recebendo parece estar relacionado à configuração do SELinux. Você pode tentar desativar temporariamente isso.
Como um aparte, gostaria de sugerir fortemente que você ajustar a configuração do sudo para ser mais restritivo.
User_Alias WWW=apache
Cmnd_Alias WEBCMDS=/etc/init.d/portmap
WWW ALL=NOPASSWD: WEBCMDS
Eu encontrei o problema recentemente e a resposta aceita acima ajudou. No entanto, eu gostaria de postar esta resposta para elaborar o mesmo, para que a próxima pessoa não precisa gastar tempo muito, como eu!
seção Siga 7 do seguinte link: https://wiki.centos.org/HowTos/SELinux .
Do grep com httpd_sys_script_t
.
Basicamente os passos são:
# grep httpd_sys_script_t /var/log/audit/audit.log | audit2allow -M httpdallowsudo
# semodule -i httpdallowsudo.pp
Este é provavelmente baixo para algo como tentar executar sudo em um shell não interativo.
Se você fizer um grep para 'sudo' em seus usuários apache enviar log que você pode encontrar coisas como esta ??p>
sudo: desculpe, você deve ter um tty para executar sudo