Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Simón Dice: Sudo Sin Clave Desde Un Programa Gambas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Simón Dice: Sudo Sin Clave Desde Un Programa Gambas 
 
Os presento una técnica que desarrollé hace un tiempo y que utilizamos en mi empresa para administrar las máquinas clientes.
El caso es que tú distribuyes, o instalas por tí mismo, tu paquete de instalación en las máquinas de los clientes y al principio muy bien, pero luego, por ejemplo, subes versiones nuevas al repositorio y te encuentras que los clientes no han actualizado las máquinas.

Hay que actualizar, pero eso es cuestión de root

O por los motivos que sea, quieres que la contraseña que el usuario introduce en tu aplicación coincida con la que tiene en el Sistema Operativo.

Pero consultar esa clave es cuestión de root

O has desarrollado un "programa auxiliar" (copias de seguridad, por ejemplo) que quieres que también esté instalado en la máquina del Cliente, que no sabe instalar nada y no entiende instrucciones sencillas por teléfono (no hablemos de por escrito).

Hay que instalarlo, pero eso es cuestión de root.

O quieres controlar qué software se ha instalado y que está estorbando el funcionamiento de tu programa y desinstalárselo si eso incumple el contrato que hiciste con él.

Pero desinstalar es cosa de root

Bien, os voy a mostrar cómo, desde mis programas ejecuto acciones de root con sudo sin que se me pida la clave nunca.

El truco es:
El sistema de sudo permite la relajación de ciertos comandos para no pedirles la clave. El más sencillo lo veis todos los días: Si ejecutas "apt update" en la consola, el sistema no te lo permite y si lo haces con sudo te pide la clave. Entonces ¿Cómo demonios lo hace el gestor de actualizaciones para decirte que hay actualizaciones pendientes? ¿Cómo es que a ése programa no se le pide la clave para eso?

La explicación es: Sudo permite que ciertos comandos concretos tengan "autorizaciones especiales" al ser ejecutados. No voy a dar más explicaciones sobre el tema que san gúgul está lleno de ellas. Basta saber que si ubicamos un fichero llamado "sidi" con éste contenido

Citar:
Cmnd_Alias SIDI = /tmp/sididar
ALL ALL = (root) NOPASSWD:SIDI


en la carpeta /etc/sudoers.d, le estamos diciendo al sistema que el comando /tmp/sididar, se ejecuta como root y no se le pide la password. Sí, ya sé que ese comando no existe, pero a ello vamos.
(por cierto SIDI por lo de Simón Dice y sididar por SImon DIce Do As Root)

Basándonos en eso hacemos lo siguiente:

A) FICHERO SIDI:

Creamos este fichero "sidi" con el contenido de arriba en la carpeta .hidden de nuestro proyecto.
A la hora de crear el paquete de instalación .deb, en la pantalla 8 ponemos ésto:
 captura_de_pantalla_de_2019_09_17_19_24_56
Con ésto, al instalar nuestro programa (momento en que sí se le/nos pedira la clave de root, claro), además de instalar nuestro proyecto, copiará sidi en la carpeta de destino.

B) El COMANDO /tmp/sididar
Una vez instalado sidi, éste comando, llamado con sudo, se ejecutará sin contraseña.
Este comando es, en realidad, un shell script que tiene el siguiente contenido:

Citar:
#/bin/bash
$1


Es decir, simplemente lanza al shell el primer parámetro que reciba.

Supongo que ya pilláis la idea: Si creáis en /tmp el fichero sididar con permisos de ejecución y, por ejemplo tecleáis

Citar:
sudo /tmp/sididar apt update


El sistema se actualizará sin pedir clave.

Abajo os adjunto un ejemplo que compara la clave tecleada con la clave del usuario en el sistema fichero /etc/shadow que es de root con permisos 640

La copia de sidi en /etc/sudoers.d, se hace en el momento de la instalación del programa vía .deb en el ordenador (evidentemente para probarlo en el IDE tendréis que copiarlo en dicha carpeta vosotros mismos)

 /tmp/sididar se crea en tiempo de ejecución para la ejecución del comando que nos interese y se elimina inmediatamente después para no dejar "agujeros" de seguridad abiertos.

Esto es hecho por una función que os paso dentro de un módulo en el proyecto de ejemplo y que permite ejecutar comandos recibiendo la salida de la consola en una variable; ejecutar comandos despreciando la salida de la consola y ejecutar comandos en background (&) y continuar con le ejecución de nuestro proyecto.

Esta técnica es, indudablemente, un agujero en la seguridad de la máquina que se instale, pero no tan grave como pudiese parecer.

En primer lugar el que al comando /tmp/sididar no se le pida la clave, no quiere decir que pueda ser usado por alguien que no pertenece al grupo sudo, con lo que lo que sea que se ejecute con esta técnica es algo que él mismo podría haber ejecutado tranquilamente. El hueco reside en aquellos usuarios que perteneciendo al grupo de sudoers, tienen configurado su sesión para que no le pida la clave al inicio, lo que deja el ordenador abierto para todo aquél que se ponga a hurgar.
Puede ser también un problema para los ordenadores físicamente accesibles que un usuario deja sin bloquear mientras se pira al desayuno o lo que sea.

Por otra parte, es una técnica que inventé yo y que aquí hago pública por primera vez, y por tanto no conocida de momento (aunque sospecho que he vuelto a inventar la rueda) aunque cualquier usuario avanzado en el funcionamiento de Linux (y cargado de malas intenciones el muy hijoputa) puede llegar a adivinar echando un ojo a la carpeta /etc/sudoers.d

En resumen, una vez instalado el sistema, la responsabilidad de la seguridad recae aún más si cabe, en el usuario, al que tendremos que aleccionar y amenazar con las penas del infierno si descuida su clave o deja el aparato abierto.

Eso sí, nuestros programas, con ésto, se convierten en todopoderosos en la máquina donde estén instalados.

Perdón por el ladrillo.
 




===================
No podemos regresar
 
última edición por shordi el Miercoles, 18 Septiembre 2019, 12:58; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Simón Dice: Controlando Las Máquinas De Nuestros Clientes Desde Gambas 
 
shordi escribió:  
Os presento una técnica que desarrollé hace un tiempo


       

Dioooss, esto es puro diamante. Pero bueno shordi, enserio !!!!

Tú eres humano o que coño eres.

Ahora entiendo más que nunca que quieras irte a Honolulu y yo si tuviera pasta te lo pagaba.

Vaya tela !!!!
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Simón Dice: Controlando Las Máquinas De Nuestros Clientes Desde Gambas 
 
    
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Simón Dice: Sudo Sin Clave Desde Un Programa Gambas 
 
Le he cambiado el título, que este da más idea de lo que estamos hablando.

Se me ha ocurrido que el peligro de todo esto es que, literalmente, le estamos colando un Troyano al que se instale el programa...
   
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Simón Dice: Sudo Sin Clave Desde Un Programa Gambas 
 
Citar:

Se me ha ocurrido que el peligro de todo esto es que, literalmente, le estamos colando un Troyano al que se instale el programa...


Efectivamente...

Y lo que significa para ti eso. Y para cuando te jubiles..te pasaran por un escáner, cuidado con las partes nobles.
Que por cierto todas esas responsabilidades tendrán sus buenas gratificaciones...un café en la máquina, un llavero para el coche, etc.  

Saludos
 




===================
Gambas Básico
“Si no puedes explicar algo de forma sencilla, entonces es que tú no lo entiendes bien.” Albert Einstein
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Simón Dice: Sudo Sin Clave Desde Un Programa Gambas 
 
[quote user="Shell" post="46413"]
Citar:

Y para cuando te jubiles..te pasaran por un escáner, cuidado con las partes nobles.
Que por cierto todas esas responsabilidades tendrán sus buenas gratificaciones...un café en la máquina, un llavero para el coche, etc.  

Saludos


         
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Recoger El ERROR De Un Programa Ejecutado ... destroyer General 1 Martes, 04 Octobre 2011, 11:35 Ver último mensaje
shordi
No hay nuevos mensajes Ejecutar Comando Con Sudo Dentro De Gambas 3 obedlink General 8 Domingo, 13 Abril 2014, 16:26 Ver último mensaje
vuott
No hay nuevos mensajes Como Conectar Una Base De Datos Creada Con... inkbell14 Bases de Datos 1 Sabado, 27 Septiembre 2014, 23:33 Ver último mensaje
jsbsan
No hay nuevos mensajes Abriendo Un Archivo Desde Gambas Con El Pr... shordi General 8 Domingo, 26 Abril 2015, 23:28 Ver último mensaje
vuott
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario