Sicurezza dell'argomento del comando Bash

5

Supponiamo di voler chiamare un programma che accetta nome utente e password per iniziare. Quali sono i rischi nel chiamare il programma come ./prog --user 'User' --password 'Password' oltre all'evidente perdita di un utente che guarda da dietro le spalle ?. C'è un modo più sicuro per inserire la password?

    
posta Anthony Kraft 16.10.2014 - 23:06
fonte

3 risposte

-2

Ci sono alcuni modi per passare la password al programma senza digitarlo:

  1. Utilizza read e una variabile

    read -s password ; ./prog --user 'User' --password "$password"
    

    Dovrai digitare la password prima di eseguire il programma.

  2. Usa reindirizzamento

    Inserisci la password su password.txt ed esegui il programma:

    ./prog --user 'User' --password 'cat password.txt'
    

Nota che anche se questi metodi nascondono la password durante la digitazione, chiunque esegua un ps xua | grep prog sarà comunque in grado di vedere la password.

Se puoi cambiare il programma per leggere la password da stdin o leggere una variabile d'ambiente, sarebbe più facile nascondere la password. In questo caso, quei metodi funzionerebbero.

    
risposta data 16.10.2014 - 23:26
fonte
12

Sulla maggior parte dei sistemi Unix, la riga di comando è visibile a tutti gli utenti, tramite il comando ps. Questo potrebbe non essere importante se si è su un sistema a utente singolo, ma questo è il motivo per cui questo approccio è generalmente etichettato come non sicuro. Ad esempio: manuale MySQL .

Un'alternativa migliore è quella di memorizzare la password in un file, che evita questa perdita. È necessario assicurarsi che le autorizzazioni sul file siano appropriate. Il link che ho fornito spiega come farlo per MySQL. Molti altri software supportano questo in qualche modo.

    
risposta data 16.10.2014 - 23:18
fonte
1

Fai in modo che il programma legga la password stessa.

Potresti usare getpass (3) o simili se stai sviluppando in un linguaggio di basso livello. Per uno script di shell puoi usare read (dato che è un builtin, non ci sono perdite negli argomenti del comando).

Si noti inoltre che se si passano le credenziali da qualche altra parte (come l'esecuzione di quel comando su un server web, riempiendo nome utente e password da quello che è stato passato da un client), ha bisogno di una citazione adeguata, quindi ad esempio una password di '' whoami '' non risulta sull'esecuzione del codice remoto.

    
risposta data 17.10.2014 - 00:24
fonte

Leggi altre domande sui tag