La pagina Web PHP non avvia il comando unix anche dopo i sudoer aggiornati
Domanda
Fondamentalmente sto cercando di riavviare un servizio da una pagina web php.
Ecco il codice:
<?php
exec ('/usr/bin/sudo /etc/init.d/portmap restart');
?>
Ma, in / var / log / httpd / error_log
, ottengo
impossibile passare a sudoers gid: operazione non consentita
e in / var / log / messages, ottengo
22 set 15:01:56 ri kernel: audit (1222063316.536: 777): avc: denied {getattr} per pid = 4851 comm = " sh " name = " var " dev = dm-0 ino = 114241 scontext = root: system_r: httpd_sys_script_t tcontext = system_u: object_r: var_t tclass = dir
22 set 15:01:56 ri kernel: audit (1222063316.549: 778): avc: denied {setrlimit} per pid = 4851 comm = "sudo " scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = process
22 set 15:01:56 ri kernel: audit (1222063316.565: 779): avc: denied {read} per pid = 4851 comm = "sudo " name = " ombra " dev = dm-0 ino = 379669 scontext = root: system_r: httpd_sys_script_t tcontext = system_u: object_r: shadow_t tclass = file
22 set 15:01:56 ri kernel: audit (1222063316.568: 780): avc: denied {read} per pid = 4851 comm = "sudo " name = " ombra " dev = dm-0 ino = 379669 scontext = root: system_r: httpd_sys_script_t tcontext = system_u: object_r: shadow_t tclass = file
22 set 15:01:56 ri kernel: audit (1222063316.571: 781): avc: denied {setgid} per pid = 4851 comm = "sudo" capacità = 6 scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = capacità
22 set 15:01:56 ri kernel: audit (1222063316.574: 782): avc: negato {setuid} per pid = 4851 comm = " sudo " capacity = 7 scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = capacità
22 set 15:01:56 ri kernel: audit (1222063316.577: 783): avc: denied {setgid} per pid = 4851 comm = " sudo " capacità = 6 scontext = root: system_r: httpd_sys_script_t tcontext = root: system_r: httpd_sys_script_t tclass = capacità
Nel mio visudo, ho aggiunto quelle righe
User_Alias ??WWW = apache
WWW ALL = (ALL) NOPASSWD: ALL
Puoi aiutarmi per favore? Sto facendo qualcosa di sbagliato?
Grazie per l'aiuto,
tiBoun
Soluzione
Il problema non è con sudo al momento, ma con SELinux , che è (ragionevolmente ) impostato per negare a HTTPD di ottenere i privilegi di root.
Dovrai consentire esplicitamente ciò (puoi usare audit2allow per questo), o impostare SELinux su essere permissivo invece. Suggerirei il primo.
Altri suggerimenti
L'errore che stai ricevendo sembra essere correlato alla tua configurazione SELinux. Potresti provare a disabilitarlo temporaneamente.
A parte, suggerirei vivamente di adattare la propria configurazione sudo in modo più restrittivo.
User_Alias WWW=apache
Cmnd_Alias WEBCMDS=/etc/init.d/portmap
WWW ALL=NOPASSWD: WEBCMDS
Di recente ho riscontrato il problema e la risposta accettata sopra è stata di aiuto. Tuttavia, vorrei pubblicare questa risposta per elaborare lo stesso, in modo che la persona successiva non debba passare molto tempo, come me!
Segui la sezione 7 del seguente link: https://wiki.centos.org/HowTos/SELinux .
Esegui grep con httpd_sys_script_t
.
Fondamentalmente i passaggi sono:
# grep httpd_sys_script_t /var/log/audit/audit.log | audit2allow -M httpdallowsudo
# semodule -i httpdallowsudo.pp
Questo probabilmente dipende da qualcosa come provare a eseguire sudo in una shell non interattiva.
Se fai un grep per 'sudo' nel tuo registro di posta degli utenti apache potresti trovare cose come questa
sudo: scusa, devi avere un tty per eseguire sudo