Bueno.. ahora me he quedado totalmente OWNED, pillado o como querais decirlo al conseguir reproducir el error que me sale ejecutando el fichero desde el navegador...
¿Como? Pues que resulta que en la linea:
Código:
shell_exec("echo 'clave' | sudo -u root -S mkdir /ggg");
la clave NO ES LA DE ROOT, sino la del uuario O_O, no me he dado cuenta porque uso la misma clave para root que para server... me estoy volviendo un poco loco.. vamos a ver... el comando suso ejecuta el comando que quieras como el usuario que pongas, en este caso root, o como usuario root siempre?
entonces me surjen undas dudillas:
1º ¿Los usuarios que tengan permiso para usar SUDO pueden ejecutar como root lo que le den la gana con solo saber SU CLAVE y no la de root? pues valla peligro...
2º Entonces, para que esto funcione, tengo que saber la clave del usuario www-data que es el que ejecuta los coamdnos desde el navegador.. vale... ¿Cual e sla clave del usuario www-data? o como se la puedo cambiar siendo root? porque no la se y el comando passwd solo me vale si me la se...
3º ¿me merezco un tiro? llevo 1 semana y pico para esto...
DIOS POR FIN:
SOLUCION PARA EJECUTAR COMO ROOT COSAS DESDE PHP:
1º #passwd www-data (y cambiamos la clave del usuario www-data a la que queramos...)
2º #apt-get install sudo (para instalar sudo en el sistema, emerge sudo para gentoo, etc..)
3º Ahora tenemos varias opciones:
- Si estamos en debian/ubuntu tendremos un grupo creado llamado "admin" el cual tiene permiso para usar sudo, si es asi, solamente tenemos que agregar el usuario www-data a este grupo editando /etc/group y añadiendo a la linea del grupo admin el usuario www-data
- Si no tenemos este grupo, podemos o dar de alta directamente al usuario www-data en /etc/sudoers poniendole que pregunte la clave SIEMPRE y dandole permisos para ejecutar cualquier comando, vamos un "ALL" en la opcion de comandos posibles...
Basicamente hay que hacer que www-data pueda usar sudo, pero requeriendo que se introduzca la clave.
SI ahora creamos un fichero PHP y metemos esto:
Código:
exec("echo 'apacheclave' | /usr/bin/sudo -u root -S rmdir /xxx", $array, $variable);
Se crea perfectamente el directorio en /xxx siendo el owner y group asociados el root, vamos que es como si el root lo halla creado.... ¿sabeis la de posivilidades que me da esto... grrrrrr?
NOTA IMPORTANTE:
Para que la sesion de sudo no se quede creada, y cualquiera nos la pueda liar, podemos o modificar la configuracion de sudo para que la sesion dure 0, o si no queremos cargarnos esa comodidad en ubuntu porque somos unos bagos de mierda (osea yo..) podemos usar "sudo -K", ejemplo...
Código:
exec("echo 'claveapache' | /usr/bin/sudo -u root -S cat /etc/sudoers", $array, $variable); // Ejecutamos el comando..
exec("sudo -K"); // !IMPORTANTE! Destruimos la sesion
Aqui la sesion de sudo de www-data esta frita gracias a sudo -K entonces nadie puede ejecutar nada como root a no ser que tenga la clave de sudo...
Eso si, queria vuestra opinion respecto a una cosa... SEGURIDAD:
Ahora www-data puede usar sudo, y podrian liarmela parda si me clavan comandos en mi server, subiendome ficheros *.php al sistema, pero como en /etc/sudoers se especifica que se inserte la clave de www-data, entonces nadie podria hacer nada... al no tener esta clave... aqui tengo unas dudas...
- ¿existe alguna forma de sacar la clave de www-data desde un script en php, cgi, perl o similar? (porque como se pueda.. putada..)
- ¿el cambiarle a www-data la clave por una esecifica dara problemas con algun mod/plugin/php/programa asociado al apache? (aver si le he cambiado la clave y ahora no funciona algo..)
Bueno, me voy a poner manos a la obra usando este sistema, para hacer un "webmin", algo mas simple, pero mas estetico xD ¿como veis el tema?
PD: Se puede decir que tengo algun problema... hasta que no doy con la solucion de algo no paro... dandole vueltas en el curro, en el metro, en el gym, en casa, en la cama... he modificado medio config del servidor, me he visitado a saber la de howto`s y foros... (los de google me van a denunciar por exceso de trafico hacia mi host xDDD), etc... ahora que se como hacerlo toy como mas relajado xD.... estoy resfriado y con fiabre y estoy aki delante con una Shell, ventana de VNC a mi server, 5 carpetas, 12 ventanas del firefox, y el dreamweaver y el notepad abiertos... lo mio es una enfermedad o algo xD