[eside-ghost] Privilegios de ejecucion
JammyZ
jammyz en gmail.com
Mie Nov 8 17:12:26 CET 2006
Bueno, al final he tirado por lo mas sencillo, y creo que mas seguro, que es
poner como requerimiento que sudo este instalado en la maquina que vaya a
ejecutarlo.
El tema de la interaccion lo he automatizado con expect (gracias txipi por
la pista). Lo he implementado tanto en un script de expect como en uno de
python (con el modulo pexpect). Si alguno no sabe cual elegir que tire por
el modulo de python, a mi me ha costado 3 veces mas currarmelo para que tire
con el interprete de expect, menudo lodazal.
On 11/8/06, Alvaro Uría <fermat en rigel.deusto.es> wrote:
>
> Aupa JammyZ,
>
> On Tue, 7 Nov 2006 15:06:24 +0000
> JammyZ <jammyz en gmail.com> escribió:
>
> > Aupa,
> > tengo un script en python que quiero que me inicie y pare servicios
> > (postgresql, apache, ...). Para ello ejecuto "sudo /etc/init.d/apache2
> > stop"(estoy en ubuntu). El problema es que no voy a tener disponible
> sudo
> > en cualquier maquina UNIX en la que ejecute mi script y el arranque y
> > parada de servicios exige privilegios de superusuario. Asi pues, cual es
> > la forma mas logica de implementar algo asi? la idea es que el script
> > siga perteneciendo a un usuario normal del sistema, sin privilegios.
>
> No sé cual es el problema real al que te enfrentas cuando dices que el
> script tiene que pertenecer a un usuario normal del sistema, sin
> privilegios... ¿buscas que ese script pueda modificarse sin ser root
> únicamente, o tb te preocupa que se comprometa la máquina? En todo esto no
> te puedo ayudar, pero lo que comento ahora me lo pensaría mucho por estos
> temas de "seguridad"...
>
> Ayer lo miré un poco (activando bit de SUID a un script en python) pero no
> conseguí nada... y hoy me he dado cuenta de por qué: Da igual que el
> script
> tenga activo dicho bit ya que estos scripts los ejecuta el intérprete
> "/usr/bin/python" que no tiene dicho bit activado.
>
> Así,
> pruebas:/home/fermat/lab/suid# l /usr/bin/python*
> lrwxr-xr-x 1 root root 9 2004-11-30 10:10 /usr/bin/python ->
> python2.3
> -rwxr-xr-x 1 root root 983480 2004-11-13 19:14 /usr/bin/python2.3
> pruebas:/home/fermat/lab/suid# su fermat
> fermat en pruebas:~/lab/suid$ ./epa.py
> >>> uid: fermat, euid: fermat
> uid=1002(fermat) gid=1002(fermat) grupos=1002(fermat)
> fermat en pruebas:~/lab/suid$
> pruebas:/home/fermat/lab/suid# chmod +s /usr/bin/python2.3
> pruebas:/home/fermat/lab/suid# su fermat
> fermat en pruebas:~/lab/suid$ ./epa.py
> >>> uid: fermat, euid: root
> uid=1002(fermat) gid=1002(fermat) euid=0(root) egid=0(root)
> grupos=1002(fermat)
> fermat en pruebas:~/lab/suid$
> pruebas:/home/fermat/lab/suid# chmod -s /usr/bin/python2.3
>
> Así que por ahí no se puede hacer nada.
>
> Luego,
>
> fermat en pruebas:~/lab/suid$ cat epa.py
> #!/usr/bin/env python
> import os,pwd
>
> epa = "uid: %s, euid: %s" % (pwd.getpwuid(os.getuid())[0],
> pwd.getpwuid(os.geteuid())[0])
> print ">>>", epa
> os.system("id")
> fermat en pruebas:~/lab/suid$
>
> Viendo ayer la solución de Txipi, y con esa restricción de no tener
> siempre
> "sudo", quizás podrías hacer un wrapper en C:
>
> fermat en pruebas:~/lab/suid$ cat prueba.c
> #include <unistd.h>
>
> int main (int argc, char**argv)
> {
> printf ("uid = %i, euid = %i\n----\n", getuid(), geteuid());
> execv("epa.py", argv);
> return 0;
> }
> fermat en pruebas:~/lab/suid$ gcc -o prueba prueba.c
> fermat en pruebas:~/lab/suid$ ./prueba
> uid = 1002, euid = 1002
> ----
> >>> uid: fermat, euid: fermat
> uid=1002(fermat) gid=1002(fermat) grupos=1002(fermat)
> fermat en pruebas:~/lab/suid$ su
> Password:
> pruebas:/home/fermat/lab/suid# gcc -o prueba prueba.c
> pruebas:/home/fermat/lab/suid# chmod +s prueba
> pruebas:/home/fermat/lab/suid# l prueba
> -rwsr-sr-x 1 root root 7236 2006-11-08 16:50 prueba
> pruebas:/home/fermat/lab/suid# su fermat
> fermat en pruebas:~/lab/suid$ ./prueba
> uid = 1002, euid = 0
> ----
> >>> uid: fermat, euid: root
> uid=1002(fermat) gid=1002(fermat) euid=0(root) egid=0(root)
> grupos=1002(fermat)
> fermat en pruebas:~/lab/suid$
>
> Suerte.
>
> Saludos,
> Alvaro Uría
> _______________________________________________
> eside-ghost mailing list
> eside-ghost en deusto.es
> https://listas.deusto.es/mailman/listinfo/eside-ghost
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: https://listas.deusto.es/mailman/private/eside-ghost/attachments/20061108/bc44a968/attachment-0001.htm
Más información sobre la lista de distribución eside-ghost