Autore Topic: Simon dice: Sudo senza chiave da un programma di Gambas  (Letto 1241 volte)

Offline shordi

  • Gamberetto
  • *
  • Post: 39
    • Mostra profilo
Simon dice: Sudo senza chiave da un programma di Gambas
« il: 17 Settembre 2019, 22:10:00 »
Vi presento una tecnica che ho sviluppato qualche tempo fa e che abbiamo usato nella mia azienda per gestire le macchine client.
Il caso è che distribuisci o installi da solo il tuo pacchetto di installazione sui computer dei client e all'inizio molto bene, ma poi, ad esempio, carichi nuove versioni nel repository e scopri che i client non hanno aggiornato il macchinari.

Devi aggiornare, ma questa è una questione di root

O per qualsiasi motivo, si desidera che la password immessa dall'utente nella propria applicazione corrisponda a quella presente nel sistema operativo.

Ma consultare quella chiave è una questione di root

Oppure hai sviluppato un "programma ausiliario" (copie di backup, ad esempio) che desideri installare anche sul computer del Cliente, che non sa come installare nulla e non comprende semplici istruzioni per telefono (non parliamo per iscritto).

Devi installarlo, ma è una questione di root.

Oppure vuoi controllare quale software è stato installato e ciò sta ostacolando il funzionamento del tuo programma e disinstallarlo se ciò viola il contratto che hai stipulato con esso.

Ma la disinstallazione è root

Bene, ti mostrerò come, dai miei programmi, eseguo azioni di root con sudo senza che mi venga mai chiesta la password.

Il trucco è:
Il sistema sudo consente il rilassamento di alcuni comandi in modo da non richiedere la password. Il più semplice che vedi ogni giorno: se esegui "apt update" sulla console, il sistema non lo consente e se lo fai con sudo ti chiede la password. Quindi, come diavolo fa il gestore degli aggiornamenti per dirti che ci sono aggiornamenti in sospeso? In che modo a quel programma non viene chiesta la chiave?

La spiegazione è: Sudo consente ad alcuni comandi specifici di avere "autorizzazioni speciali" quando eseguiti. Non darò ulteriori spiegazioni sull'argomento che San Gúgul ne sia pieno. Sappi solo che se individuiamo un file chiamato "sidi" con questo contenuto

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

Nella cartella /etc/sudoers.d, stiamo dicendo al sistema che il comando /tmp/sididar viene eseguito come root e la password non è richiesta. Sì, so che questo comando non esiste, ma lo faremo.
(A proposito, SIDI per Simón Dice e sididar per SImon DIce Do As Root)

Sulla base di ciò facciamo quanto segue:

A) FILE SIDI:

Creiamo questo file "sidi" con il contenuto sopra nella cartella .hidden del nostro progetto.
Quando creiamo il pacchetto di installazione .deb, sullo schermo 8 inseriamo questo:



Con questo, quando installi il nostro programma (a quel punto ti verrà richiesta la chiave di root, ovviamente), oltre a installare il nostro progetto, copierai sidi nella cartella di destinazione.

B) COMANDO / tmp / sididar
Una volta installato sidi, questo comando, chiamato con sudo, verrà eseguito senza password.
Questo comando è in realtà uno script di shell con il seguente contenuto:

#/bin/bash
$1

Cioè, basta semplicemente lanciare il primo parametro che riceve nella shell.

Immagino che tu abbia già l'idea: se crei in /tmp il file sididar con permessi di esecuzione e, ad esempio, digita

sudo /tmp/sididar apt update

Il sistema verrà aggiornato senza richiedere una password.

Di seguito è riportato un esempio che confronta la chiave digitata con la password dell'utente nel file /etc/shadow system che è root con 640 autorizzazioni

La copia di sidi in /etc/sudoers.d, è fatta al momento dell'installazione del programma tramite .deb sul computer (ovviamente per testarlo nell'IDE dovrai copiarlo tu stesso in quella cartella)

/tmp/sididar viene creato in fase di esecuzione per l'esecuzione del comando che ci interessa e viene rimosso immediatamente dopo per non lasciare "buchi" di sicurezza aperti.

Questo viene fatto da una funzione che ti ha passato all'interno di un modulo nel progetto di esempio e che ti consente di eseguire comandi ricevendo l'output della console in una variabile; esegui comandi ignorando l'output della console ed esegui i comandi in background (&) e continua con l'esecuzione del nostro progetto.

Questa tecnica è senza dubbio un buco nella sicurezza della macchina installata, ma non così grave come potrebbe sembrare.

Prima di tutto, se il comando /tmp/sididar non viene richiesto per la password, ciò non significa che possa essere utilizzato da qualcuno che non appartiene al gruppo sudo, quindi tutto ciò che viene eseguito con questa tecnica è qualcosa che lui Avrebbe potuto correre tranquillamente se stesso. Lo spazio risiede in quegli utenti che, appartenenti al gruppo di sudoer, hanno la loro sessione impostata in modo che non chiedano la password all'inizio, il che lascia il computer aperto a chiunque inizi a rovistare.
Può anche essere un problema per i computer fisicamente accessibili che un utente lascia sbloccato mentre va a colazione o altro.

D'altra parte, è una tecnica che ho inventato e che sto pubblicando qui per la prima volta, e quindi non nota al momento (anche se sospetto di aver reinventato la ruota) sebbene qualsiasi utente avanzato nel funzionamento di Linux (e caricato con cattive intenzioni il figlio di puttana) può indovinare guardando la cartella /etc/sudoers.d

In sintesi, una volta installato il sistema, la responsabilità della sicurezza ricade ancora di più sull'utente, che dovrà istruire e minacciare le pene dell'inferno se trascura la sua password o lascia aperto il dispositivo.

Naturalmente, i nostri programmi, con questo, diventano onnipotenti nella macchina in cui sono installati.

Scusa per il mattone.
« Ultima modifica: 18 Settembre 2019, 13:02:36 da shordi »
Non possiamo tornare

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Simon dice: controllare le macchine dei nostri clienti dalla gambas
« Risposta #1 il: 17 Settembre 2019, 22:39:05 »
Scaricato, grazie.
Questione molto interessante  :D

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline portaro

  • Gamberetto
  • *
  • Post: 2
    • Mostra profilo
Re:Simon dice: Sudo senza chiave da un programma di Gambas
« Risposta #2 il: 24 Settembre 2019, 22:55:44 »
 ;D Grazie