2010-11-30 72 views
0

目前我正在開發一個C linux守護進程,它接收用戶輸入的SQL連接字符串,然後將信息存儲到本地conf文件(客戶端)中。守護進程的目的是以設定的時間間隔向SQL數據庫提交數據,每次守護進程加載時,它都會查找本地conf以查找SQL連接字符串。同樣,通過使用命令行參數-c,用戶可以在信息更改的情況下重新配置SQL連接字符串。任何人都願意分享一種保護這個conf文件的方法,以便它不是純文本。請記住,我仍然需要能夠訪問和從conf文件讀入,因爲存在其他conf設置。先謝謝你們。保護純文本文件中的敏感數據的最佳做法?

編輯:我最終打算使用SSL在客戶端和SQL服務器之間提交數據。

回答

6

保護該文件的(唯一?)方法是更改​​其權限,以使其可讀只有與運行守護進程的用戶可讀。

例如,如果你正在運行進程的用戶「富」和組「富」,你應該:

chown foo.foo my-conf-file 
chmod 600 my-conf-file 

(甚至把它chmod命令400,以防止意外修改,但我想在這種情況下,你將失去-c選項功能)。

注意:還要記住,在命令行中傳遞連接字符串是相當危險的,因爲它們將從進程列表中可見!

你也可以使用一些GPG的東西來加密文件,但是我沒有看到那個地方,因爲那時你必須保護你用來標識文件的密鑰,並且你會得到和以前完全相同的問題。

+0

嗯,我確實掩蓋了輸入信息的密碼,但你提出一個有效的觀點是危險的。我想我真正想要做的是隱藏純文本文件。在這種情況下,我甚至不認爲用戶應該有權訪問conf文件,只有守護進程本身應該訪問。 – Error1f1f 2010-11-30 15:41:27

+0

當然,'運行守護進程的用戶'應該是僅用於此目的的系統用戶,而不是登錄到系統的普通用戶。完成此操作的最佳方法是以root身份運行守護程序,然後將`setuid()`運行到另一個權限較低的系統用戶的uid,這是唯一可以訪問配置文件的用戶。 – redShadow 2010-11-30 15:46:19

0

如果你沒有地方保守你的祕密,密碼學不會幫助你。如果守護進程以某種方式能夠解密密碼而不使用任何祕密,那麼任何人都可以這樣做。所以你必須依靠系統保護,比如文件訪問模式標誌來保存密鑰。