Skąd PS wie, aby ukryć hasła?


22

Świadek:

$ 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

Skąd PS wiedział, aby ukryć mysqlhasła? Czy mogę włączyć to do własnych skryptów, aby ukryć określone atrybuty CLI?


6
Jest to prawdopodobnie inny sposób i mysqldziała magicznie, a nie ps: „Klienci MySQL zazwyczaj nadpisują argument wiersza polecenia zerami podczas sekwencji inicjalizacji.” - Wytyczne dla użytkowników końcowych dotyczące bezpieczeństwa haseł
— manatwork

Dziękuję, to jest dokument informacyjny. Zobaczę, jak mogę zastąpić argumenty CLI we własnych skryptach.
— dotancohen

1
@manatwork Chciałbym odpowiedzieć na to pytanie, ponieważ tak właśnie się dzieje - i jest to przydatne łącze do problemów bezpieczeństwa dotyczących mysql. :)
— Drav Sloan

Zauważ, że chociaż argumenty wiersza poleceń mogą być podsłuchiwane, zmienne środowiskowe są bezpieczne .
— Gilles „SO- przestań być zły”

Aby uzyskać więcej informacji na ten temat, zobacz unix.stackexchange.com/q/385339/135943
— Wildcard

Odpowiedzi:


23

psnie ukrywa hasła. Aplikacje takie jak mysql zastępują listę argumentów, którą otrzymali. Należy pamiętać, że istnieje krótki przedział czasowy (możliwy do rozszerzenia przez duże obciążenie systemu), w którym argumenty są widoczne dla innych aplikacji, dopóki nie zostaną zastąpione. Ukrywanie procesu innym użytkownikom może pomóc. Zasadniczo o wiele lepiej jest przekazywać hasła przez pliki niż w wierszu poleceń.

W tym artykule opisano C, jak to zrobić. Poniższy przykład ukrywa / usuwa wszystkie argumenty wiersza poleceń:

#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 = ' ';
    }

    // ...
}

Zobacz także /programming/724582/hide-arguments-from-ps i /programming/3830823/hiding-secret-from-command-line-parameter-on-unix .


Bardzo fajnie, dziękuję. Nie zdawałem sobie sprawy, że argumenty jako takie można modyfikować.
— dotancohen

Pamiętaj również, że nie wszystkie programy będą to robić za pomocą haseł.
— popiół

Link do tego artykułu jest zepsuty. Ktoś, kto wyjaśni mi kod? (Dlaczego kod działa, wystarczy ustawić \0spację?) Dowolny link do setproctitle()?
— schemacs

Czy odpowiedź leży tutaj ?
— schemacs

7

Mysql program zastępuje hasła z wiersza poleceń ze xw tej linii kodu :

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

3
Niestety nie jest to tak bezpieczne, jak mogłoby być. Możesz powiedzieć, jak długie jest hasło. Lepiej zastąp go \0, abyś potrzebował dodatkowych informacji, aby znaleźć długość hasła (bez UB / SEGFAULT).
— wizzwizz4,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.