PHP página web no lanzar comandos de unix, incluso después de actualizado sudoers
Pregunta
Básicamente estoy tratando de reiniciar un servicio de php de la página web.
Aquí está el código:
<?php
exec ('/usr/bin/sudo /etc/init.d/portmap restart');
?>
Pero, en /var/log/httpd/error_log
, Tengo
no se puede cambiar a sudoers gid:La operación no permitida
y en /var/log/messages, tengo
Sep 22 15:01:56 ri kernel:de auditoría(1222063316.536:777):avc:negó { getattr } pid=4851 comm="sh" name="var" dev=dm-0 ino=114241 scontext=raíz:system_r:httpd_sys_script_t tcontext=system_u:object_r:var_t tclass=dir
Sep 22 15:01:56 ri kernel:de auditoría(1222063316.549:778):avc:negó { setrlimit } pid=4851 comm="sudo" scontext=raíz:system_r:httpd_sys_script_t tcontext=raíz:system_r:httpd_sys_script_t tclass=proceso
Sep 22 15:01:56 ri kernel:de auditoría(1222063316.565:779):avc:negó { leer } pid=4851 comm="sudo" name="shadow" dev=dm-0 ino=379669 scontext=raíz:system_r:httpd_sys_script_t tcontext=system_u:object_r:shadow_t tclass=archivo
Sep 22 15:01:56 ri kernel:de auditoría(1222063316.568:780):avc:negó { leer } pid=4851 comm="sudo" name="shadow" dev=dm-0 ino=379669 scontext=raíz:system_r:httpd_sys_script_t tcontext=system_u:object_r:shadow_t tclass=archivo
Sep 22 15:01:56 ri kernel:de auditoría(1222063316.571:781):avc:negó { setgid } pid=4851 comm="sudo" capacidad=6 scontext=raíz:system_r:httpd_sys_script_t tcontext=raíz:system_r:httpd_sys_script_t tclass=capacidad de
Sep 22 15:01:56 ri kernel:de auditoría(1222063316.574:782):avc:negó { setuid } pid=4851 comm="sudo" capacidad=7 scontext=raíz:system_r:httpd_sys_script_t tcontext=raíz:system_r:httpd_sys_script_t tclass=capacidad de
Sep 22 15:01:56 ri kernel:de auditoría(1222063316.577:783):avc:negó { setgid } pid=4851 comm="sudo" capacidad=6 scontext=raíz:system_r:httpd_sys_script_t tcontext=raíz:system_r:httpd_sys_script_t tclass=capacidad de
En mi visudo, he añadido estas líneas
User_Alias WWW=apache
WWW ALL=(ALL) NOPASSWD:ALL
Puede usted ayudarme por favor ?Estoy haciendo algo mal ?
Gracias por tu ayuda,
tiBoun
Solución
El problema no es con sudo en el momento, pero con SELinux, que es (razonablemente) configurado para denegar el HTTPD de obtener privilegios de root.
Usted tendrá que permitir explícitamente este (puede utilizar audit2allow para esto), o un conjunto de SELinux para ser permisivo en su lugar.Yo sugeriría que el anterior.
Otros consejos
El error que usted está consiguiendo parece estar relacionado con la configuración de SELinux.Usted puede tratar de desactivación temporal de eso.
Como un aparte, me gustaría sugerir fuertemente que usted ajuste su configuración de sudo para que sean más restrictivas.
User_Alias WWW=apache
Cmnd_Alias WEBCMDS=/etc/init.d/portmap
WWW ALL=NOPASSWD: WEBCMDS
Me encontré con el problema reciente y aceptada respuesta anterior ayudado.Sin embargo, me gustaría publicar esta respuesta para la elaboración de la misma, por lo que la siguiente persona no necesita gastar mucho tiempo, como yo!
Siga la sección 7 del siguiente enlace: https://wiki.centos.org/HowTos/SELinux.
Hacer con grep httpd_sys_script_t
.
Básicamente los pasos son:
# grep httpd_sys_script_t /var/log/audit/audit.log | audit2allow -M httpdallowsudo
# semodule -i httpdallowsudo.pp
Esto es probablemente algo como intentar ejecutar sudo en un no-shell interactivo.
Si hacer un grep para 'sudo' en su apache usuarios de correo de registro usted puede encontrar cosas como esta
sudo:lo siento, debe tener un tty para ejecutar sudo