2012-06-06 23 views
12

Cómo ejecutar PHP desde un script bash bajo usuario root (con todos los permisos) y no nadie usuario - php usuario por defecto?cómo ejecutar PHP desde un script bash bajo usuario root

esa es mi salida después de visudo sudo:

Defaults  env_keep += "LINES COLUMNS" 
Defaults  env_keep += "LSCOLORS" 
Defaults  env_keep += "SSH_AUTH_SOCK" 
Defaults  env_keep += "TZ" 
Defaults  env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" 
Defaults  env_keep += "EDITOR VISUAL" 
Defaults  env_keep += "HOME MAIL" 

#User privilege specification 
root ALL=(ALL) ALL 
%admin ALL=(ALL) ALL 


# Uncomment to allow people in group wheel to run all commands 
# %wheel  ALL=(ALL) ALL 

# Same thing without a password 
# %wheel  ALL=(ALL) NOPASSWD: ALL 

# Samples 
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom 
# %users localhost=/sbin/shutdown -h now 
+3

Esto suena peligroso, por lo que plantea la pregunta obvia: ¿por qué necesita para hacer esto? Quizás esta es una mejor solución general. –

Respuesta

27

Puede usar sudo:

exec("sudo /your/script"); 

Usted debe permitir la ejecución de su script sin solicitud de contraseña. Ejecutar sudo visudo en la consola y agregue la siguiente cadena al final:

nobody ALL = NOPASSWD: /your/script 

Debe configurar el modo de archivo correctamente para asegurarse de que nadie puede modificar este script y poner contenidos peligrosos en ella (en la consola de root):

chown root:root /your/script 
chmod 755 /your/script 
+0

¿Dónde exactamente debería agregarlo? Publico mi salida después de 'sudo visudo' en la pregunta – Oleg

+0

+1 Buena respuesta. –

+0

Simplemente ponga una nueva línea al final del archivo. –

1

Puede hacer un programa que se establece-UID root. Esto hace que el programa siempre se ejecute como root. Esto no funciona con scripts de shell, por lo que debe usar un program which calls your script.

+0

El enlace parece roto. – Droidzone

0

En Linux normalmente haces esto usando sudo. Intente ser lo más específico posible, para no otorgar demasiados permisos al script.

Para obtener ejemplos de cómo utilizar sudo: http://aplawrence.com/Basics/sudo.html

+0

El problema es que cuando lo ejecuto en el terminal funciona bien, pero cuando ejecuto ese script bash desde php no se ejecuta (otros comandos bash simples con 'cp',' mv' funcionando), creo que es 90% permisos – Oleg

0

me gustaría añadir una regla específica para permitir que este script para ser llamado por nobody usuario, utilizando sudo.

+0

¿Cómo puedo hacerlo? intenté muchas cosas pero no funciona – Oleg

+0

Consulte la respuesta de Riateche: debe agregar la línea 'nobody ALL = NOPASSWD:/your/script' al archivo" visudo "(archivo de configuración de sudoers). Por supuesto, sustituya '/ your/script' por la ruta a su script. –

+0

¿Cómo puedo editar este archivo? utilicé 'sudo visudo' pero muestra solo el resultado. – Oleg

0

Recientemente publiqué un proyecto que permite a PHP obtener e interactuar con un shell Bash real (como usuario: apache/www-data o root si es necesario). Consíguelo aquí: https://github.com/merlinthemagic/MTS

Después de descargar sólo tendría que utilizar el siguiente código:

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 
$return1 = $shell->exeCmd('/full/path/to/script.sh'); 
Cuestiones relacionadas