MySQL在Linux系統中隱藏命令列中的密碼的方法

來源:互聯網
上載者:User

   這篇文章主要介紹了MySQL在Linux系統中隱藏命令列中的密碼的方法,作者利用簡單的C程式實現,需要的朋友可以參考下

  在命令列中輸入命令並不是一個好主意,會造成安全問題。但是如果你決定去寫一個應用,而這個應用需要在命令列中使用密碼或者其他敏感資訊。那麼,你能通過以下方法禁止系統的其他使用者輕易的看到這些敏感性資料 呢?,類似MySQL在ps命令下隱藏密碼。

  假設我這裡系統裡兩個使用者,一個是root ,一個是dabu 。測試系統為centos 6.5在按照下面的步驟做:

  ?

1 2 3 4 [root@dabu.info ~]#su dabu #切換到dabu這個帳號 [dabu@dabu.info ~]$cd ~ #切換到dabu的home目錄 [dabu@dabu.info ~]$ touch pwhide.c #建立 pwhide.c檔案 [dabu@dabu.info ~]$ls

  顯示:

  複製代碼 代碼如下:

  pwhide.c

  將下面的代碼儲存到 pwhide.c :

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include <stdio.h> #include <unistd.h> /* unix類系統定義符號常量的標頭檔*/ #include <string.h> /* 字元數組的函數定義的標頭檔*/ #include <sys/types.h> /* Unix/Linux系統的基本系統資料類型的標頭檔*/   int main(int argc, char *argv[]) /*形參argc指命令列中參數的個數(包括執行檔案本身)。形參argv是一個紙箱字串的指標數組*/ { int i = 0; pid_t mypid = getpid(); /*獲得該程式運行時候的pid*/ if (argc == 1) /*如果argc參數個數等於1,按要求,應該argc要為2才行*/ return 1; /*異常退出*/ printf("argc = %d and arguments are:n", argc); /*列印argc參數個數*/ for (i ; i < argc ; i++) /*列印i序號,以及對應的argv數組指標元素*/ printf("%d = %sn" ,i, argv[i]); /*列印i序號,以及對應的argv數組指標元素*/ printf("Replacing first argument with x:es... Now open another terminal and run: ps p %dn", (int)mypid); /*列印該字串和該程式是的pid*/   fflush(stdout); //*清空緩衝區,並列印其內容*/ memset(argv[1], 'x', strlen(argv[1])); /*注意,這裡是本文的重點和關鍵點。(原文http://www.dabu.info/?p=5150)就是利用memset(void *s, int c, size_t n)函數用x來覆蓋密碼的每個字元*。你也可以將x替換為 a ,然後重新編譯運行,再ps看看有什麼不同/ getc(stdin); /* 等待並擷取鍵盤輸入,其實這裡主要的作用是保持該c程式在 運行狀態,這樣才能通過ps 查看pid來觀察密碼是否被隱藏 。所以在這個函數運行後,不能再有任何的鍵盤操作 */ return 0; /* 正常退出 */   #include <stdio.h> #include <unistd.h> /* unix類系統定義符號常量的標頭檔*/ #include <string.h> /* 字元數組的函數定義的標頭檔*/ #include <sys/types.h> /* Unix/Linux系統的基本系統資料類型的標頭檔*/   int main(int argc, char *argv[]) /*形參argc指命令列中參數的個數(包括執行檔案本身)。形參argv是一個紙箱字串的指標數組*/ { int i = 0; pid_t mypid = getpid(); /*獲得該程式運行時候的pid*/ if (argc == 1) /*如果argc參數個數等於1,按要求,應該argc要為2才行*/ return 1; /*異常退出*/ printf("argc = %d and arguments are:n", argc); /*列印argc參數個數*/ for (i ; i < argc ; i++) /*列印i序號,以及對應的argv數組指標元素*/ printf("%d = %sn" ,i, argv[i]); /*列印i序號,以及對應的argv數組指標元素*/ printf("Replacing first argument with x:es... Now open another terminal and run: ps p %dn", (int)mypid); /*列印該字串和該程式是的pid*/   fflush(stdout); //*清空緩衝區,並列印其內容*/ memset(argv[1], 'x', strlen(argv[1])); /*注意,這裡是本文的重點和關鍵點。(原文http://www.dabu.info/?p=5150)就是利用memset(void *s, int c, size_t n)函數用x來覆蓋密碼的每個字元*。你也可以將x替換為 a ,然後重新編譯運行,再ps看看有什麼不同/ getc(stdin); /* 等待並擷取鍵盤輸入,其實這裡主要的作用是保持該c程式在 運行狀態,這樣才能通過ps 查看pid來觀察密碼是否被隱藏 。所以在這個函數運行後,不能再有任何的鍵盤操作 */ return 0; /* 正常退出 */ }

  然後編譯 pwhide.c ,命令如下:

  ?

1 2 [dabu@dabu.info ~]$ gcc -o hide pwhide.c #編譯後的檔案叫 hide [dabu@dabu.info ~]$ ls

  顯示:

  代碼如下:

  hide pwhide.c

  用編譯後的程式進行測試:

  ?

1 2 3 4 5 6 [dabu@dabu.info ~]$ ./hide dabu.info //dabu.info作為參數(其實就是密碼) 進行測試 顯示: argc = 2 and arguments are: 0 = ./hide 1 = dabu.info Replacing first argument with x:es... Now open another terminal and run: ps p 15585

  注意:ps p 15585 。你可能和我的不一樣,因為pid每次運行,都會變的。你顯示什麼數字,後面就用什麼數字。

  顯示出上面結果後,不再進行任何操作,也不關閉這個終端視窗(命令視窗)。然後在用root帳號登入,就是相當於同時開兩個終端視窗。輸入下面的命令:

  ?

1 2 3 4 [root@dabu.info ~]#ps p 15585 #就是運行 ./hide dabu.info後,得到的該程式的pid 顯示: PID TTY STAT TIME COMMAND 15585 pts/0 S+ 0:00 ./hide xxxxxxxxx //dabu.info 共有9個字元,所以這裡就顯示9個x

  由此測試的結果,我們知道了這個方法能夠使MySQL如何在ps命令下隱藏命令列中的密碼。以此類推,在寫其他程式後,就知道如何使用這個方法來 讓程式 在ps命令下隱藏命令列參數。

  為了簡明起見,上面的代碼可能不怎麼好移植到其他平台,但是它可以工作在linux上,並且如願的表達了關鍵點。在其它環境,如FreeBSD,你可以使用系統調用setproctitle() 來為你做這種苦力活。關鍵的一點是重寫argv

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.