Come fa ps a nascondere le password?


22

Testimone:

$ ps f
  PID TTY      STAT   TIME COMMAND
31509 pts/3    Ss     0:01 -bash
27266 pts/3    S+     0:00  \_ mysql -uroot -p
25210 pts/10   Ss+    0:00 /bin/bash
24444 pts/4    Ss     0:00 -bash
29111 pts/4    S+     0:00  \_ tmux attach
 4833 pts/5    Ss+    0:00 -bash
 9046 pts/6    Ss     0:00 -bash
17749 pts/6    R+     0:00  \_ ps f
 4748 pts/0    Ss     0:00 -bash
14635 pts/0    T      0:02  \_ mysql -uroot -px xxxxxxxxxxxxxxxx
16210 pts/0    S+     0:01  \_ mysql -uroot -px xxxxxxxxxxxxxxxx

Come faceva ps a nascondere le mysqlpassword? Posso incorporarlo nei miei script per nascondere particolari attributi della CLI?


6
E 'probabilmente il contrario e mysqlfa la magia, non è ps: “i clienti di MySQL in genere sovrascrivere l'argomento della password della riga di comando con zeri durante la loro sequenza di inizializzazione.” - Linee guida per l'utente finale per Password Security
manatwork

Grazie, questo è un documento informativo. Vedrò come potrei sovrascrivere argomenti cli nei miei script.
dotancohen,

1
@manatwork Lo direi come una risposta, perché è esattamente quello che sta succedendo - ed è un collegamento utile per problemi di sicurezza riguardanti mysql. :)
Drav Sloan,

Si noti che mentre gli argomenti della riga di comando possono essere ficcati, le variabili di ambiente sono sicure .
Gilles 'SO- smetti di essere malvagio' il

Per ulteriori informazioni al riguardo, consultare unix.stackexchange.com/q/385339/135943
Wildcard

Risposte:


23

psnon nasconde la password. Le applicazioni come mysql sovrascrivono l'elenco degli argomenti che hanno ottenuto. Si noti che esiste un piccolo lasso di tempo (possibile estendibile da un elevato carico di sistema), in cui gli argomenti sono visibili ad altre applicazioni fino a quando non vengono sovrascritti. Nascondere il processo ad altri utenti potrebbe aiutare. In generale è molto meglio passare le password tramite file che per riga di comando.

In questo articolo è descritto per C, come fare. L'esempio seguente nasconde / elimina tutti gli argomenti della riga di comando:

#include <string.h>

int main(int argc, char **argv)
{
    // process command line arguments....

    // hide command line arguments
    if (argc > 1) {
        char *arg_end;    
        arg_end = argv[argc-1] + strlen (argv[argc-1]);
        *arg_end = ' ';
    }

    // ...
}

Guarda anche /programming/724582/hide-arguments-from-ps e /programming/3830823/hiding-secret-from-command-line-parameter-on-unix .


Molto bene, grazie. Non mi rendevo conto che gli argomenti sono mutabili in quanto tali.
dotancohen,

Si noti inoltre che non tutti i programmi lo faranno con password.
ash

Il link a questo articolo è interrotto. Qualcuno per spiegare il codice per me? (Perché il codice funziona, impostato solo \0sullo spazio?) Qualche collegamento a setproctitle()?
schemacs

O la risposta sta qui ?
Schemacs

7

Il programma mysql sostituisce la password dalla riga di comando con xin questa riga di codice :

while (*argument) *argument++= 'x';     // Destroy argument

3
Sfortunatamente, non è così sicuro come potrebbe essere. Puoi sapere quanto dura la password. È meglio sostituirlo con in \0modo che siano necessarie ulteriori informazioni per trovare la lunghezza della password (senza UB / SEGFAULT).
wizzwizz4,
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.