reindirizzare una password e sicurezza


11

A volte lo faccio echo "secret" | mysql -u root -p .... Ora sono d'accordo sulla sicurezza qui: qualcuno che elenca tutti i processi può vedere la password?

Per verificare ho provato con echo "test" | sleep 1000e il comando echo con il segreto non era visibile nell'output di "ps aux". Quindi presumo sia sicuro, ma un esperto di sicurezza può confermarlo per favore? :)


Non riesco a vederlo in un elenco di processi quando si esegue un ciclo infinito. Buona domanda.
Tim

1
Inoltre, non dimenticare che qualsiasi cosa digiti sulla maggior parte delle shell verrà archiviata in un file di cronologia da qualche parte (come .history).
Alexander Bird,

Risposte:


13

La risposta a questo dipende dalla shell che stai usando. Molte shell hanno echocome comando incorporato il che significa che non genera un processo separato e quindi non compare in un elenco di processi. Tuttavia, se si digita /bin/echoo ./echoo si disabilitano i builtin con il enable -n echocomando, la shell non utilizzerà il suo comando incorporato e utilizzerà invece la versione binaria. Questo verrà visualizzato in un elenco dei processi.

Se si utilizza il binario anziché l'integrato della shell, il comando echo verrà visualizzato per tutto il tempo necessario per spostare i dati nel buffer STDIN dell'altro processo. Questo buffer ha una dimensione finita, quindi se ci sono più dati di quelli che si adattano al buffer, il comando echo dovrà rimanere in sospeso per un po 'fino a quando l'altro processo non può leggere alcuni dei dati dal buffer. Per la maggior parte dei casi (come i due esempi forniti in precedenza) questo periodo di tempo sarà di microsecondi. Se stai incollando un dump SQL da 20 MB in MySQL usando echo, questo potrebbe essere più lungo. Non importa quanto sia breve il tempo, se stai usando il binario invece della shell incorporata e qualcuno capisce che i tempi sono giusti, saranno in grado di vedere il processo nell'elenco dei processi.

Puoi evitarlo inserendo i dati segreti in un file (con le autorizzazioni appropriate) e usando il file come STDIN in questo modo:

mysql -u root -p < file_with_secret.sql

5
Tieni presente che digitando la password nella riga di comando in questo modo è molto probabile che venga salvata nel file cronologico della shell, quindi vale la pena controllare l'autorizzazione e il contenuto del file cronologico.
aculich,

3

Per il caso mysql ~ / .my.cnf può essere usato per memorizzare segreti, ad es

[client]
user = DBUSERNAME
password = DBPASSWORD
host = DBSERVER

[mysql]
database = DBNAME

1

Basta usare

mysql -uroot -p

e premi invio. Verrà quindi richiesta la password e questa non sarà visibile né nell'elenco dei processi né nei file della cronologia.


I dati accettati su STDIN da MySQL sono i comandi da eseguire una volta effettuato l'accesso. Il "segreto" nella domanda non è la password.
Ladadadada,
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.