2010-11-09 133 views
5

想知道是否有任何方法來保護* nix系統中的環境變量,使得它們不能從任何純文本文件中讀取,但在環境中可用。Linux - 保護環境變量

我知道我們總是可以對.bashrc/.bash_profile使用文件系統級權限,但是如果某些變量(如db密碼)要完全隱藏,該怎麼辦?做

一種方式是寫某種程序/ perl腳本的:從一個純文本文件

  1. 採取輸入和加密/哈希的內容(然後擺脫純文本文件)
  2. 使用相同的解密文件運行,並從解密的輸出 (我知道這個程序可以用來某處轉儲解密的值,但是我現在我不關心那個)
出口值

有沒有其他的b etter和更明顯的方式來實現這一目標?

謝謝!

-Gaurav

+3

也許你會更好的問服務器故障。 – rook 2010-11-09 01:34:42

回答

2

你是從誰那裏得到保護的?

簡短答案是「否」。用戶可以看到他們自己的環境變量,除非您將它們充分填滿以至於永遠不能訪問外殼。但你讓他們使用哪個編輯器?你說'vim'嗎?哦,他們畢竟已經進入了殼。

5

沒辦法。即使您將其從文本文件中隱藏起來,仍可從/proc/<pid>/environ(linux)或ps e(其他unix)獲得。

+1

這不完全正確 - 在現代內核版本上,environ'文件對其他非root用戶不可見。 – 2013-04-16 14:59:29

+0

關鍵是用戶定義環境變量是安全的。只有root用戶以及定義環境變量的進程的所有者才能訪問'/ proc/$ pid/environ'。但是,也有可能出現用戶需要它的情況 - 密鑰存儲可能選擇通過環境變量將密碼/登錄傳輸到另一個應用程序。用戶可能能夠通過這種方法找出密碼。我在這裏有類似的問題:http://unix.stackexchange.com/a/206219/117221 – YoYo 2015-05-31 17:27:38

+0

你可以在完成使用後取消設置變量嗎?它仍會顯示在'/ proc//environ'中嗎? – richizy 2018-01-24 18:37:01

0

這是可能的,但非常間接。您需要將敏感數據保存到只能由啓動需要環境變量的進程的進程讀取的文件中。 /proc/###/environ只能由正在運行進程的用戶讀取,因此數據在那裏是安全的。

但是,更直接地,隱藏的東西一樣數據庫密碼正確的方法是將它們保存在僅由用戶和/或組,該程序讀取它們運行作爲讀取的文件。不要打擾他們在一個環境變量中傳遞(除非你真的需要出於某種原因),只需讓這個進程從文件中讀取它們。

例如,如果你正在運行的Web站點和CGI腳本/二進制文件是由Apache的,它運行的用戶開始:組apache:apache,保存數據庫密碼的CGI需要成apache:apache與像權限所擁有的文件rw-r-----640)。這樣一來,爲別人讀文件,他需要或者是root,該apache組,或者運行與apache有效的用戶或組的讀取計劃的成員。

使用環境變量的唯一好處是您可以在啓動子進程之前將其從環境中移除,而如果子進程由同一用戶擁有,則它可以讀取受保護的文件。