Ubuntu: Lanzar script como SuperUser sin que pregunte la pass

Buenas. la cuestion es que tengo un Script para Ubuntu que NECESITO que sea lanzado con derechos de Root (el script para un par de servicios, actualiza un par de ficheros, y vuelve a rearrancar los servicios) pero el problema es que en dicho PC no puedo poner la clave de Usuario para poder lanzarlo con SUDO, dicho PC hace labores de MediaCenter y no tiene teclado. asi que dicho Script sera lanzado a traves de un boton de un control remoto. el problema es que, claro, dicho script es lanzado desde una sesion de usuario, y necesito derechos administrativos para poder detener dichos sevicios, pero no puedo escribir dicha pass por no tener teclado (y un teclado en pantalla no es una opcion)

asi pues, necesito lanzar un script, desde una sesion de usuario, con permisos de root, pero sin escribir la pass que solicita SUDO.

si quereis, puedo pastear el contenido del script, pero no es nada del otro mundo.

ya he probado con SUID, dandole la propiedad del script a ROOT y dandole SUID al script, pero no funciona.
Pues tienes que poner el bit suid en los permisos del fichero, y hacer que el dueño sea el root. Con ello se ejecutara con los permisos del dueño aunque lo ejecute otro usuario.

Salu2!
Dagaren escribió:Pues tienes que poner el bit suid en los permisos del fichero, y hacer que el dueño sea el root. Con ello se ejecutara con los permisos del dueño aunque lo ejecute otro usuario.

Salu2!


1er post de f5inet escribió:ya he probado con SUID, dandole la propiedad del script a ROOT y dandole SUID al script, pero no funciona.


gracias, ya lo probe, pero extrañamente no funciona...

concretamente hice un:
sudo chown root:root script.sh
sudo chmod 4775 script.sh

y al ejecutar el script.sh, no me lo ejecuta con derechos de root, puesto que no me detiene los servicios.
A ver si te sirve algo de esto


Cómo hacer que sudo no nos pida contraseña y otros trucos relacionados
http://mundogeek.net/archivos/2007/05/14/como-hacer-que-sudo-no-nos-pida-contrasena-y-otros-trucos-relacionados/
Pues TIENE que funcionar, no es algo que pueda fallar. ¿Realizas algún tipo de comprobación para ver con que permisos te está ejecutando el script? Quizás si que se esté ejecutando como root pero falle otra cosa...

Salu2!
muchas gracias zootropo, lo probare esta tarde, cuando llegue a casa.

Dagaren, ya se que TIENE que funcionar, de hecho, en la epoca de redhat 5.2 yo mismo tuve que hacerle algo asi al demonio PPPD para que pudiera conectar a infobirria plus un usuario raso. pero la cuestion es que NO funciona...
La pagina no funciona al parecer. De todas formas si aun asi no te funciona se me ocurre una ligera chapuza para solucionar la papeleta.

Primero si estas en Ubuntu o similar activas el usuario root, para olvidarnos de sudo.

Luego instalas y activas un servidor ssh, el cual se lanzara al iniciar el ordenador y que permitira el login solo al user root y solo por rsa. Creas una clave gpg rsa publica y privada y la publica la aniades al fichero ~/.ssh/authorized_keys y la privada a ~/.ssh/id_rsa

Y luego en tu script arriba del todo la primera orden que lanzas es

ssh root@127.0.0.1

Voila, ya deberias ser root

Por cierto no estaria de mas configurarlo para que solo acepte conexiones locales. Por cuestiones de seguridad mas que nada.
Mete en /etc/sudoers al usuario y comando con un NOPASSWD

PD: txukie, se te va la pinza. XD

Un saludo.
bastian escribió:Mete en /etc/sudoers al usuario y comando con un NOPASSWD

PD: txukie, se te va la pinza. XD

Un saludo.

Ya está comentado en el enlace que puse
zootropo escribió:Ya está comentado en el enlace que puse

Me imaginaba que era eso, pero como Txukie ha dicho que no funcionaba el enlace, lo he puesto sin mirar si ya lo hacía. ;)

Un saludo.
muchas gracias a todos, ya he conseguido hacerlo.

al final ha sido cuention de poner un !noauthenticate al fichero sudoers.

ahora tengo otro problema, pero para no desviar el hilo con un offtopic, he abierto otro hilo:
http://www.elotrolado.net/showthread.php?s=&threadid=774058
Se me ira la pinza pero creo que mi solucion es la mejor desde un punto de vista de seguridad.
Txukie escribió:Se me ira la pinza pero creo que mi solucion es la mejor desde un punto de vista de seguridad.

¿Me explicas por qué?
Txukie escribió:Se me ira la pinza pero creo que mi solucion es la mejor desde un punto de vista de seguridad.


discrepo.

tu solucion incluia instalar un servicio nuevo, configurarlo para modo solo local, y acceder a el.

la solucion por la que he optado ha sido modificar el comportamiendo de SUDO para que no pida Password, ¡Pero aun es necesario SUDO para hacer cosas como root!

desde el punto de vista puro de la seguridad, bajo mi modesto punto de vista, la solucion por la que he optado es mas segura, puesto que no he abierto un nuevo servicio en el PC.

PD: otra cosa, totalmente aparte, es que he instalado el servidor OPENSSH para administrar remotamente el PC.
Si desconectas el password de sudo, cualquiera con acceso a la maquina con el usuario normal (aka mi novia) tiene permisos de superusuario directamente y quizas incluso sin saberlo. Si evolucionas mi idea y pones la clave privada en una llave USB de la cual tu tienes el control (por ejemplo) y la pinchas cuando quieras usar el ordenador, tu me diras quien va a entrar. Ademas, si conoces a alguien capaz de saltarse un SSHv2 bien configurado y con una RSA de digamos 1024 bits te pago un petisuis de fresa [sonrisa]
Supongo que habrá editado sudoers para que solo ese script se ejecute como root sin pedir contraseña, no para que se ejecute cualquier cosa.

Lo de poner el SUID a un script no va a funcionar nunca. Primero, lo que se ejecuta no es el script, sino el interprete, así que los permisos son los que tenga bash, perl, python, awk o lo que sea. Además, permitir eso sería inseguro.

saludos
Patxito escribió:Supongo que habrá editado sudoers para que solo ese script se ejecute como root sin pedir contraseña, no para que se ejecute cualquier cosa.

Lo de poner el SUID a un script no va a funcionar nunca. Primero, lo que se ejecuta no es el script, sino el interprete, así que los permisos son los que tenga bash, perl, python, awk o lo que sea. Además, permitir eso sería inseguro.

saludos


patxito, en realidad modifique sudoers para que al escribir SUDO no pida la pass. punto pelota.

txukie, en entornos servers, cualquier nuevo demonio o proceso servidor ejecutandose, es un nuevo software corriendo y escuchando. un nuevo software al que se le pueden descubrir bugs. en entornos servers, donde se valora la seguridad y donde normalmente no hay ninguna sesion abierta en local, mi solucion es MAS SEGURA que la tuya. ojo, no digo que tu solucion no sea buena (que lo es, y muy ingeniosa), pero si argumentas que tu solucion es mas segura, te equivocas.

de nuevo, hay que mirar con perspectiva. he hecho lo mas sencillo para el caso particular que tenia, esto es: media center, sin teclado ni raton conectado.

patxito, gracias por apuntarme porque el SUID no rulaba en un script.
Me lo apunto yo tambien....
Bueno, en el enlace se explica cómo hacer que no te la pida para un cierto programa, para ninguno, que tarde más tiempo entre cada vez que te la pide...

Luego que cada uno escoja lo que le venga mejor ;)
Txukie escribió:Si desconectas el password de sudo, cualquiera con acceso a la maquina con el usuario normal (aka mi novia) tiene permisos de superusuario directamente y quizas incluso sin saberlo.

Ya te lo han explicado más o menos, pero vamos. Con la alternativa de sudo, puedes darle permisos a un único usuario para ejecutar un único comando sin contraseña. Dicho usuario no tiene por qué ser un usuario real.

Con tu opción:
Obligas a tener ssh escuchando, si no tenía ese servicio ya.
Obligas a habilitar la cuenta de root.
Debes permitir que root pueda conectarse por ssh (aunque sólo sea en modo local).
El usuario que tiene la clave privada es root a todos los efectos, y tiene por tanto control total en la máquina.
Además si la cuenta de ese usuario es vulnerada, el atacante tendrá automáticamente privilegios de root.

Creo que no hace falta que siga.

Un saludo.
bastian escribió:Ya te lo han explicado más o menos, pero vamos. Con la alternativa de sudo, puedes darle permisos a un único usuario para ejecutar un único comando sin contraseña. Dicho usuario no tiene por qué ser un usuario real.

Con tu opción:
Obligas a tener ssh escuchando, si no tenía ese servicio ya.
Obligas a habilitar la cuenta de root.
Debes permitir que root pueda conectarse por ssh (aunque sólo sea en modo local).
El usuario que tiene la clave privada es root a todos los efectos, y tiene por tanto control total en la máquina.
Además si la cuenta de ese usuario es vulnerada, el atacante tendrá automáticamente privilegios de root.

Creo que no hace falta que siga.

Un saludo.

No los tendria si tiene la clave privada en un stick USB.
Si maniana se descubre un bug en un programa que el use que permita ejecutar codigo arbitrario y ese codigo esta diseniado para intentar conectarse como sudo le funcionara. Si alguien accede a su usuario directamente es root. Con mi solucion hace falta tener la clave privada, lo cual necesita de insertar la llave usb o el cd o el metodo que el quiera.
Prefiero fiarme mil veces antes de ssh que ha sido probado mil veces en entornos de produccion del mundo entero antes de sudo que no ha sido tan probado o de la aplicacion de HTPC que SE CONECTA A INTERNET y que a saber si tiene servicios abiertos por defecto como uPnP. Siempre que un sistema necesite de un elemento humano para validarse (meter la llave usb para leer la clave privada) sera siempre mas seguro.

Por no mencionar que ha editado los sudoers para que todas las aplis puedan ser lanzadas sin poner clave.... ;)
Yo creo que lo más fácil, cómodo y seguro sería permitir que un usuario (el que corresponda) tenga permisos para ejecutar como root en esa máquina solo ese script sin contraseña.

Lo de la llave usb y el ssh escuchando solo en loopback está bien pensado, pero a la larga la llave acabará siempre enchufada por pereza y será más inseguro. Si eres cuidadoso con lo de la llave, está muy bien. Bueno, yo hablo desde mi punto de vista. En mi caso seguro que acababa siempre puesta XD.

saludos
Txukie escribió:No los tendria si tiene la clave privada en un stick USB.
Si maniana se descubre un bug en un programa que el use que permita ejecutar codigo arbitrario y ese codigo esta diseniado para intentar conectarse como sudo le funcionara. Si alguien accede a su usuario directamente es root. Con mi solucion hace falta tener la clave privada, lo cual necesita de insertar la llave usb o el cd o el metodo que el quiera.
Prefiero fiarme mil veces antes de ssh que ha sido probado mil veces en entornos de produccion del mundo entero antes de sudo que no ha sido tan probado o de la aplicacion de HTPC que SE CONECTA A INTERNET y que a saber si tiene servicios abiertos por defecto como uPnP. Siempre que un sistema necesite de un elemento humano para validarse (meter la llave usb para leer la clave privada) sera siempre mas seguro.

Con lo del USB puede que sea algo más seguro, aunque no lo habías comentado en un principio y no deja de ser un engorro innecesario andar enchufándolo y desenchufándolo. Por otra parte, no sé si lo podrás desmontar desde el programita ese cuando quieras desenchufarlo.

Luego lo de si se encuentra un bug y tal, (aunque ya entramos en la especulación) ha dicho que necesita permisos de root para ejecutar un script que lanza o reinicia unos servicios, no que el programa se vaya a ejecutar con esos permisos.

Por no mencionar que ha editado los sudoers para que todas las aplis puedan ser lanzadas sin poner clave.... ;)

Yo no he dicho que su solución sea la mejor, (no ha hecho lo que le recomendamos) pero tú si dijiste que la tuya era mejor que las demás, no sólo la suya. ;)

Un saludo.
22 respuestas