程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL在Linux系統中隱藏命令行中的密碼的方法

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

編輯:MySQL綜合教程

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


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

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

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

  ?

1

2

3

4

[[email protected] ~]#su dabu #切換到dabu這個賬號

[[email protected] ~]$cd ~ #切換到dabu的home目錄

[[email protected] ~]$ touch pwhide.c #創建 pwhide.c文件

[[email protected] ~]$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 = %s\n" ,i, argv[i]); /*打印i序號,以及對應的argv數組指針元素*/

printf("Replacing first argument with x:es... Now open another terminal and run: ps p %d\n", (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 = %s\n" ,i, argv[i]); /*打印i序號,以及對應的argv數組指針元素*/

printf("Replacing first argument with x:es... Now open another terminal and run: ps p %d\n", (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

[[email protected] ~]$ gcc -o hide pwhide.c #編譯後的文件叫 hide

[[email protected] ~]$ ls

  顯示:

  代碼如下:

  hide pwhide.c

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

  ?

1

2

3

4

5

6

[[email protected] ~]$ ./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

[[email protected] ~]#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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved