Impossibile creare un utente con password tramite ssh [chiuso]


13

Ho provato a creare un utente con password tramite ssh (con permesso di root) in questo modo:

ssh root@123.45.6.7 useradd -p $(openssl passwd -1 1234) newuser

In questo modo, ho potuto creare correttamente un account chiamato newuser, ma non sono riuscito ad accedere con la password prevista (che è 1234)

Non fa differenza se aggiungo virgolette doppie:

ssh root@123.45.6.7 "useradd -p $(openssl passwd -1 1234) newuser"

E poi mi chiedevo se posso generare la password con hash e salvarla come variabile localmente, ma ancora senza fortuna.

password=$(openssl passwd -1 1234)
ssh root@123.45.6.7 "useradd -p $password newuser"

C'è qualcosa che mi manca? Grazie in anticipo!


Passare le password sulla riga di comando è una cattiva idea perché altri utenti potrebbero vedere gli argomenti della riga di comando. Vedi la risposta di Heemayl per questo. Oltre a ciò, sembra un problema XY . Cosa stai effettivamente cercando di ottenere? Qual è il punto di una password dell'account che nessuno conosce (o dovrebbe sapere)? Se il punto è creare un account che non accetta gli accessi tramite password, semplicemente non impostare alcuna password che lascerà l'accesso basato su password disabilitato come criterio predefinito di Ubuntu.
David Foerster,

Risposte:


22

Questo è un classico problema di quotazione.

Problema: senza virgolette o doppie virgolette, la sostituzione del comando ( $()) e l'espansione della variabile (le $s nella password con hash restituite opensslvengono trattate come indicatore variabile) vengono eseguite nell'ambiente locale, non nella shell remota.

Soluzione: utilizzare virgolette singole attorno al useraddcomando utilizzato con sshsulla shell locale per impedire la sostituzione dei comandi e l'espansione variabile nell'ambiente locale, lasciare che le espansioni avvengano sulla shell remota non-login, non interattiva:

ssh root@123.45.6.7 'useradd -p "$(openssl passwd -1 1234)" newuser'

Nota le citazioni.

Problemi di sicurezza:

  • L' rootaccesso SSH dovrebbe essere disabilitato, se è necessario averlo abilitato dovrebbe essere consentita solo l'autenticazione basata su chiave

  • L'MD5 è già rotto e senza salare si è sottoposti a un semplice attacco della tabella Rainbow (non è nemmeno necessario il bruto forzamento / attacco del dizionario); openssl passwdgenera comunque un sale casuale. Ad ogni modo, dovresti davvero considerare l'uso di SHA-2 con la salatura

  • Le password passate come argomenti ai comandi potrebbero essere visibili ad altri processi nel sistema (remoto); questo dipende da come procfsè montato (guarda hidepid), e se il comando si sta riscrivendo (in questo caso presumibilmente non lo fa)


1
Funziona come un incanto e grazie per le informazioni aggiuntive!
amigcamel,

1
l'hash della password md5crypt ha un sale ...
ilkkachu

@ilkkachu MD5 non è un hash sicuro. Se sei interessato, esegui una ricerca sulla sicurezza delle informazioni . In realtà dovresti usare un algoritmo composto o una libreria crittografica, ma SHA-2 è significativamente migliore di MD5.
wizzwizz4,

1
@ wizzwizz4 sì, è noto, non cambia il fatto che le informazioni in questa risposta siano errate. :)
hobbs

2
@ wizzwizz4, l'hash della password ( md5crypt ) supportato da crypt(3)in Linux e contrassegnato con l' $1$identificatore non è lo stesso dell'algoritmo hash MD5 normale, allo stesso modo in cui gli hash della password$5$ e non sono semplici SHA-256 e SHA-512 . Il metodo basato su MD5 ha un numero fisso di iterazioni, che è il problema più grande con esso. $6$
ilkkachu,

7

Come notato da @heemayl, l'algoritmo di hash della password MD5 è obsoleto e i sistemi attuali hanno i nuovi hash di password basati su SHA-2, che hanno un fattore di lavoro personalizzabile. Ma lo strumento da riga di comando OpenSSL non sembra supportarli.

L' chpasswdutilità , tuttavia, ti permetterà di modificare la password di un utente in base alle impostazioni di sistema.

Ciò dovrebbe consentire di creare il nuovo utente e modificare la password sull'estremità remota.

echo "newuser:newpass" | ssh root@123.45.6.7 'useradd newuser; chpasswd' 

chpasswdprende il nome utente e la password da stdin, non dalla riga di comando. Questo è in realtà un vantaggio poiché gli argomenti della riga di comando sono visibili per tutti gli altri processi sul sistema, quindi se eseguito openssl passwdsul telecomando, la password sarebbe momentaneamente visibile a tutti i processi sul sistema.

Non sono sicuro che esista un'utilità da riga di comando pronta per generare hash di password noti dalla crypt(3)funzione di sistema . Perl ha la cryptfunzione integrata , ma sarebbe comunque necessario generare un sale adeguato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.