Estoy ejecutando el servidor web lighttpd en Raspbian (basado en Debian) en una Raspberry Pi. El servidor se ejecuta como usuario www-data (marcado con ps aux
). Agregué la siguiente línea a /etc/sudoers
:
www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd
para poder ejecutar la vcgencmd
herramienta desde Raspberry Pi que brinda información de estado desde un archivo PHP con
<? echo shell_exec('vcgencmd version'); ?>
Todo lo que imprime es "Error en la inicialización de VCHI" (en lugar de la supuesta información de versión que aparece cuando lo ejecuto en mi usuario incluso sin sudo
) que aparece cuando vcgencmd se ejecuta con permisos incorrectos.
corriendo por ejemplo
<? echo shell_exec('cat /sys/class/thermal/thermal_zone*/temp'); ?>
funciona bien sin ningún /etc/sudoers
cambio, por lo que no hay problema con PHP (como prohibido shell_exec
o algo así).
¿Qué más se debe configurar para ejecutar un comando?
Respuesta1
Si desea utilizar algo que agregó /etc/sudoers
, debe llamar sudo
.
sudo
es solo un programa con el bit setuid configurado. No tiene absolutamente nada de especial, es decir, no se interpone cada vez que se inicia un programa.
La razón por la que puede llamar cat /sys/class/thermal/thermal_zone*/temp
es porque tiene acceso de lectura a esos archivos. Dependiendo de cómo estén configurados los permisos de su sistema de archivos, es posible que tenga acceso de lectura, pero no necesariamente de escritura.
El motivo vcgencmd version
podría funcionar cuando se inicia como su propio usuario y tiene 2 explicaciones posibles:
- Lo tienes
alias vcgencmd='sudo vcgencmd
en tu perfil, así lo ejecutas automáticamentesudo
. - Tiene permisos suficientes para los archivos que
vcgencmd
necesita para operar. Si necesita acceso de escritura y los archivos pertenecen a un grupo del que es miembro y tiene acceso de escritura para ese grupo, entonces no necesitará sudo.
En resumen, cambie su comando a sudo vcgencmd version
. O encuentre qué permisos de archivo necesita para modificarlos y modificarlos.