Invio del comando di spegnimento tramite ssh usando sudo in modo non interattivo

0

Con iOS 12 e la nuova app Siri Shortcuts , ho pensato ai modi in cui avrei potuto sfruttare il Funzionalità di comando SSH nell'app. Per quelli di voi che non lo sanno, l'app consente di inviare un file bash o una stringa a stdin e restituisce stdout come un file di testo normale, connettendosi utilizzando l'autenticazione della password (nessuna autenticazione token).

Quello che mi piacerebbe fare è creare un collegamento che esegua sudo shutdown [...] su un server remoto tramite l'azione del comando SSH. Poiché l'azione non è interattiva e non è tty, non posso inserire la password in modo interattivo e sono riluttante a inserire la password come testo normale nella stringa di input dell'azione / stdin . D'altra parte, non voglio usare sudo -n e NOPASSWD per il comando shutdown , poiché si tratta di un rischio per la sicurezza che non desidero affrontare. Ho pensato di richiedere forse una stringa casuale per il messaggio shutdown per NOPASSWD da abilitare nel file sudoers (cioè, sudo shutdown -h now richiederebbe una password, ma sudo shutdown -h now japos98vh92p3hoab982hfpa non lo farebbe), ma non lo faccio so se questo è più sicuro o addirittura possibile.

In sintesi, come posso inviare in modo sicuro un comando di arresto su SSH utilizzando una sessione non interattiva, non tty?

    
posta Matt 19.09.2018 - 20:07
fonte

2 risposte

0

Ho capito come farlo usando NOPASSWD e una stringa casuale. Ho aggiunto le seguenti righe al mio file sudoers :

matt  ALL=(ALL) NOPASSWD: /sbin/shutdown -h now japos98vh92p3hoab982hfpa
matt  ALL=(ALL) NOPASSWD: /sbin/reboot japos98vh92p3hoab982hfpa

Funzionava esattamente come volevo. :)

    
risposta data 26.11.2018 - 03:35
fonte
1

Ci sono un sacco di domande diverse qui, alcune delle quali non sono domande di sicurezza (per esempio "come usare sudo su una sessione SSH non interattiva" è in realtà una domanda di programmazione / superuser), e alcune delle quali solo puoi rispondere (ciò che conta come "sicuro").

Quindi, invece di rispondere direttamente alla tua domanda, ti indicherò alcune cose sulla sicurezza da considerare riguardo alle tue due proposte.

I don't want to use sudo -n and NOPASSWD for the shutdown command, as that's a security risk that I don't want to deal with.

Potrebbe essere necessario approfondire quale sia il rischio per la sicurezza e perché non vuoi affrontarlo. Chiaramente stai bene con Siri conoscendo il tuo nome utente e la password per SSH in, che, se gli sviluppatori iOS dovessero costruire un meccanismo per gestire sudo prompt o un utente malintenzionato dovessero estrarre il tuo nome utente / passwd dall'archivio di Siri, sarebbe abbastanza per eseguire qualsiasi azione di amministrazione su quella macchina.

Il motivo per cui sudo ha bisogno di una password è di impedire il download di malware in firefox e quindi di trasformarsi in root. Dal caso d'uso che descrivi nella tua domanda, se ssh user@machine 'sudo cmd' richiede di digitare la tua password una o due volte non fa la differenza dal punto di vista della sicurezza; l'hacker conosce la tua password o non lo fa.

sudo shutdown -h now japos98vh92p3hoab982hfpa

Non so come lo realizzeresti (ma mi piacerebbe sapere se puoi spiegare come nei commenti!). Saltando questo (e qualsiasi potenziale buco di sicurezza che si apre nel processo), suppongo che questo diventi una seconda password di amministratore in modo che un utente malintenzionato debba conoscere sia la password del proprio account sia questa "password amministratore" per eseguire shutdown . Questa "password amministratore" apparirà in più punti: in chiaro nell'app Siri, nella cronologia di bash per il tuo utente, nell'albero del processo mentre è in esecuzione (prova ps -u ), e probabilmente in altri posti - c'è un motivo cose come sudo prendono le password tramite stdin, non tramite gli argomenti della riga di comando.

Quindi assumendo

  1. Un utente malintenzionato è entrato nel tuo account - tramite SSH o perché ha scaricato malware in firefox e l'ha eseguito
  2. Hai già eseguito questo comando ed è nella tua cronologia di bash

Non sono sicuro che ci sia qualche differenza di sicurezza tra questo e l'impostazione di shutdown in NOPASSWD .

    
risposta data 20.09.2018 - 00:29
fonte

Leggi altre domande sui tag