¿Cómo realizo acciones de root desde una cuenta no root?

15

Quiero poder reiniciar los servicios desde un script php. ejecutándose bajo la cuenta de usuario www.

¿Cuál es la forma preferida de realizar estas acciones?

Reconozco que puedo crear un archivo con comandos que'd, leídos por CRON, pero la solución pica.

En lo que estoy pensando es en un pequeño servicio, que se ejecuta bajo root, que permite "métodos" predefinidos para que no se puedan ejecutar acciones raíz arbitrarias.

¿Alguna herramienta para esto?

usuario65297
fuente
@MadHatter, Mona Lisa envía sus saludos, ;-)
user65297

Respuestas:

27

Podrías reinventar la rueda, pero, sinceramente, utilizo sudo sin contraseña para esto. Por ejemplo, mi sistema de monitoreo necesita poder ejecutar un comando para verificar el RAID de hardware. Esto requiere privilegio de root, pero no quiero ejecutar todo el sistema de monitoreo como root, así que en su lugar tengo sudoersuna línea que dice

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

y luego ejecute el comando sudo /usr/lib/nagios/plugins/check_md_raidcomo usuario de monitoreo, cuando necesito verificar el RAID.

Podrías tener una línea de sudoers que decía

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

entonces haga que PHP ejecute sudo /etc/rc.d/init.d/myservice restart.

MadHatter
fuente
2
Este es el camino a seguir en la OMI. Usé este proceso para una tarea similar. Ha estado en producción durante más de 3 años. Nunca ha fallado nada y el riesgo de seguridad es casi inexistente siempre que proteja el código PHP que lo activa correctamente con la lógica de su aplicación.
Andrew Ensley
1
Gracias, sudoers nuevos para mí y golpear el objetivo. @ Andrew, gracias por la información adicional.
usuario65297
1
usuario65927, perdóneme si esto no es una novedad para usted, pero la etiqueta local es que cuando tiene una respuesta satisfactoria a una pregunta, la acepta haciendo clic en el esquema al lado.
MadHatter
1
También es posible que deba comentar la línea "Valores predeterminados requeridos" en su archivo sudoers. Este paso me ha atrapado varias veces. (Por ejemplo, cambie "Predeterminado requiretty" a "#Defaults requiretty")
steve.lippert
6

Eche un vistazo a sudo : permite especificar acciones que se pueden realizar como otro usuario (root en su caso).

Por ejemplo, puede agregar a su /etc/sudoers(no edite el archivo directamente visudo)

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

Consulte man sudolos detalles y la sintaxis del archivo

Matteo
fuente
2
tenga MUCHO cuidado cuando edite el /etc/sudoersarchivo. Si de alguna manera es sintácticamente incorrecto, cambiarlo de nuevo es una pesadilla b / c que necesitas sudovolver a usar , pero no puedes b / c simplemente eliminaste sudo. Termina teniendo que usar un CD / DVD de rescate y montar la partición manualmente.
puk
1
@puk En realidad, para editar shudders, necesita acceso root y, en caso de que el archivo esté dañado, puede iniciar sesión como root y luego restaurarlo (desde una copia de seguridad) o arreglarlo manualmente. visudo también realiza controles de cordura en el archivo antes de escribirlo.
Matteo
lo que es shudders? Es cierto que el visudo hace controles de cordura, pero no ayudan después de que el daño está hecho: P
puk