CGI con permisos de root
día intentándolo resolver y nada, google, documentación oficial, todo en vano.. :S El ...
Hola, tengo un problema que me está volviendo loco.. llevo todo el día intentándolo resolver y nada, google, documentación oficial, todo en vano.. :S
El caso es que estoy haciendo una cgi que ha de permitir parar y pausar los procesos en ejecución del servidor.. pero para eso necesito permisos de root.. :p . (No es un entorno de producción, está en una máquina virtual, y sólo es una prueba de concepto... básicamente tengo que demostrar que puedo para que me cojan en un trabajo.. todo iba bien hasta que me encontrado con este punto).
El caso es que he probado con el suid, he probado creando scripts fuera con el suid y llamándolos, y he buscado por todas partes... pero no encuentro nada.. ¿alguien tiene alguna ida?
Muchas gracias por vuestra atención.
--
Per la llibertat de la ment...
Per la llibertat del pensament...
--
- Inicie sesión o regístrese para enviar comentarios
- 308 lecturas


perdon, olvidé mencionarlo: utilizo apache2 sobre debian lenny.
--
Per la llibertat de la ment...
Per la llibertat del pensament...
--
Sudo???
Se supone que no tienes acceso a la cuenta de supersusuario, pero puedes configurar sudo para que te permita ejecutar el script como root??
$ pago_hipoteca
$ bash: pago_hipoteca: orden no encontrada
...Linux roza la perfección.
Tengo permisos de root como programador y como administrador.. lo que pasa es que apache ejecuta todo con permisos reducidos... para mejorar la seguridad, y por eso, aunque ponga el bit suid al script, sigue sin dejarme hacer la orden kill o killall a procesos que no maneje su usuario.. :( . En todo caso, lo del sudo fue una idea, no es que fuera mi gran baza para resolver el problema.. entre muchas ideas puede aparecer una buena (aunque no he tenido muchas, jeje)
--
Per la llibertat de la ment...
Per la llibertat del pensament...
--
De las Normas del Foro:
16. No publiques tu duda en varias categorías a la vez
Si has escrito un mensaje en alguna categoría del foro, no lo vuelvas a repetir en otra categoría distinta, ya que será borrado. Si debido a un error, se publica tu mensaje dos veces, no te preocupes, en breve un moderador lo eliminará.
Ya eliminé el duplicado.
"Rendirse ante la ignorancia y llamarla dios siempre ha sido prematuro, y aún sigue siéndolo"
(Isaac Asimov)
Bueno para empezar, ejecutar un script que mate procesos desde un apache (usuario www-data) no me parece una gran idea, pero si te empeñas no tienes muchas más opciones que darle el permiso con sudo para que ese usuario pueda ejecutar el script.
No te voy a contar todos los problemas que puede acarrear eso, pero seguro que alguien te contará alguno
$ pago_hipoteca
$ bash: pago_hipoteca: orden no encontrada
...Linux roza la perfección.
:) se muy bien lo que acarrea, no lo hago por gusto, sino porque me lo mandan :p . Y bueno... el sudo no va bien.. a no ser que permita sudo sin clave, pero eso es mas peligroso aún, porque si apache tuviera un fallo, se le podria hacer que ejecutara sudo sin conocer siquiera la clave... :S quiero algo que se restrinja únicamente al script.. (y luego ya blindaré el script si hace falta, aunque no lo creo, porque nunca llegará a un entorno de producción :p)
--
Per la llibertat de la ment...
Per la llibertat del pensament...
--
Modifica el código fuente del apache y haz que ejecute el cgi antes del dropping de privilegios.
"Don't accept that what's happening;
Is just a case of others' suffering;
Or you'll find that you're joining in"
-Pink Floyd- On the turning away.
Modifica el código fuente del apache y haz que ejecute el cgi antes del dropping de privilegios.
hola tazok quería preguntarte donde puedo econtrar buena documentación de lo que me mencionas me interesa investigar estoy dando una buena leida al man de apache actualmente me encuentro interesado en correr scripts perl para cgi ... tengo el conocimiento de manejo de sockets en perl ... pero aun no se como llegar a aplicarlos ... no se si hay alguna dirección especial editar algun archivo para agregarle este script
saludos
La perseverancia es el primer paso al éxito
al final lo arregle con algo todavía más peligroso que todo lo anterior.. :S
puse el bit suid al comando killall, xD . Quise hacer un clon de killall i ponerle ese bit, con otro nombre, ya se ke la seguridad por ofuscacion no es buena, pero por lo menos iba a entorpocer un ataque... lo que pasa es que no me iba el clon! hice:
cp killall killall_copia , al killall_copia le puse el bit suid ... pero no matava procesos.. solo se dedicaba a darme el numero del proceso... ¿porqué con otro nombre no va? joder, si que está bien hecho el debian de los cojones, xD. Pues eso, que no me han quedado mas cojones que hacer esa barbaridad para avanzar con la práctica..
si alguien tiene una idea mejor.. por favor, que la comente (por el bien de todos los que en un futuro me pidan locuras como estas, xDDD).
--
Per la llibertat de la ment...
Per la llibertat del pensament...
--
Pues nada, al final encontré otra solución, sigue siendo insegura (por el momento, porque no he implementado filtrado en la entrada de datos), pero es mejor.
Creé un servicio con cron, un script con permisos de root se ejecuta cada minuto y lee una tabla en la que se han guardado las tareas delicadas a ejecutar, acto seguido, las ejecuta.
De esta forma no tengo que activar el bit suid de programas peligrosos, y el daño que se puede hacer es el mismo (bueno, ahora más, pero en cuanto haya filtrado de datos, menor, porque no comprometo la seguridad de los otros cgis que pueda haber en el sistema). (Sudo no me parece una buena alternativa, porque tendría que ser sin clave, y eso da alas a reventar el sistema muy fácilmente.. desde cualquier cgi, no solo desde esta).
P.D.: Esta mañana he encontrado una solución similar para un problema similar en el foro de scripting :p , la encontré tarde.
--
Per la llibertat de la ment...
Per la llibertat del pensament...
--
Fuera del hecho que lo que pretendes hacer es una barbaridad, la manera mas "segura" es utilizar sudo como te dijeron en uno de los primeros posts, aqui tenés un manualsito que explica bastante bien su uso y como hacer para que no te exija password.
Saludos.
Creer que algo es imposible es el primer paso para que lo sea.
te dejo aca una guia habla que puede ser peligroso lo que haces
http://www.zonasiete.org/manual/ch05s05.html
para este caso el sudo me parece la mejor obcion
La perseverancia es el primer paso al éxito
Bueno, pues os comento, lo mejor que se puede hacer es un script, que este lo ejecute el script de arranque de apache, es decir un script que se quede sondeando un archivo gracias al comando tail -1f, para que solo muestre el ultimo pid y que como este script de arranque de apache se ejecuta con permisos de root, cualquier script que sea llamado a traves de el se ejecutará con los mismos permisos, es decir la idea es que
/etc/init.d/apache2 contenga un script de llamada a un script que se quedará siempre en memoria sondeando un archivo y que cuando encuentre una orden determinada, configurada en dicho script, que haga todo lo que tiene que hacer, en este fin de semana intentaré subir una pequeña demostración, en la que comprobareis el script apache2 inicial y como quedaría + los scripts correspondientes al dondeo, lo tengo probado y funciona, es la ultima prueba que realicé de un reinicio automatico de apache cuando se encontraba con el problema de cache, a Ariel seguro que le suena jejeje.
La seguridad es solo un estado mental.
Entre la satisfacción y la total decepción hay solo una acción.
Solo se que se todo lo que no se
esta interesante lo que ices tigreci hablas de modificar el script del mismo apache y agregarle otro como complemento verdad ???
La perseverancia es el primer paso al éxito
esta interesante lo que ices tigreci hablas de modificar el script del mismo apache y agregarle otro como complemento verdad ???
Correcto.
La seguridad es solo un estado mental.
Entre la satisfacción y la total decepción hay solo una acción.
Solo se que se todo lo que no se