Ps şifreleri gizlemeyi nasıl biliyor?


22

Tanık:

$ 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

Ps mysqlşifreleri gizlemeyi nasıl biliyordu ? Belirli CLI niteliklerini gizlemek için bunu kendi scriptlerime dahil edebilir miyim?


6
Muhtemelen başka bir yoldur ve mysqlsihri yapar ps: “MySQL istemcileri, başlatma sırasındaki sırasındaki sıfırlar ile komut satırı parola argümanının üzerine yazar.” - Parola Güvenliği için Son Kullanıcı Kılavuzları
manatwork, 29.03

Teşekkürler, bu bilgilendirici bir belgedir. Kendi komut dosyalarımdaki cli argümanlarının üzerine nasıl yazabileceğimi göreceğim.
dotancohen

1
@ manatwork Bunu bir cevap olarak koyardım, çünkü tam olarak olan budur - ve mysql ile ilgili güvenlik sorunları için yararlı bir bağlantıdır. :)
Drav Sloan

Komut satırı argümanlarının aranmasına rağmen, ortam değişkenlerinin güvenli olduğunu unutmayın .
Gilles 'SO- kötülük' dur '29

Bununla ilgili daha fazla bilgi için bkz. Unix.stackexchange.com/q/385339/135943
Wildcard

Yanıtlar:


23

psşifreyi gizlemez. MySQL gibi uygulamalar sahip oldukları argümanlar listesinin üzerine yazar. Lütfen, argümanların üzerine yazılıncaya kadar diğer uygulamalarda görülebildiği küçük bir zaman dilimi (yüksek sistem yüküyle genişletilebilir) olduğunu unutmayın. Süreci diğer kullanıcılara gizlemek yardımcı olabilir. Genel olarak, şifreleri dosyalardan komut satırına göre iletmekten daha iyidir.

Gelen bu makalede o C için açıklanan bu nasıl yapılacak. Aşağıdaki örnek, tüm komut satırı argümanlarını gizler / siler:

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

    // ...
}

Ayrıca bkz. Https://stackoverflow.com/questions/724582/hide-arguments-from-ps ve /programming/3830823/hiding-secret-from-command-line-parameter-on-unix .


Çok hoş teşekkürler. Argümanların bu kadar değişken olduğunu anlamadım.
dotancohen

Ayrıca, tüm programların bunu şifrelerle yapmayacağını da unutmayın.
kül

Bu yazının bağlantısı kesildi. Kodu benim için açıklayacak kimse var mı? (Kod neden çalışıyor, yalnızca \0boşluğa ayarlanmış ?) Herhangi bir bağlantı var mı setproctitle()?
şemalar,

Ya da cevap burada mı yatıyor ?
şemalar,

7

MySQL programı ile komut satırından şifresini değiştirir xiçinde kod satırında :

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

3
Maalesef, olabileceği kadar güvenli değil. Şifrenin ne kadar uzun olduğunu söyleyebilirsiniz. \0Parola uzunluğunu bulmak için ek bilgiye ihtiyaç duymanız için (UB / SEGFAULT olmadan) değiştirmek daha iyidir .
wizzwizz4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.