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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top