Agregar www-data a /etc/sudoers no funciona para PHP shell_exec() para ejecutar un comando

Agregar www-data a /etc/sudoers no funciona para PHP shell_exec() para ejecutar un comando

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 vcgencmdherramienta 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/sudoerscambio, por lo que no hay problema con PHP (como prohibido shell_execo algo así).

¿Qué más se debe configurar para ejecutar un comando?

Respuesta1

Si desea utilizar algo que agregó /etc/sudoers, debe llamar sudo.

sudoes 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*/tempes 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 versionpodría funcionar cuando se inicia como su propio usuario y tiene 2 explicaciones posibles:

  1. Lo tienes alias vcgencmd='sudo vcgencmden tu perfil, así lo ejecutas automáticamente sudo.
  2. Tiene permisos suficientes para los archivos que vcgencmdnecesita 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.

información relacionada