2012-03-22 35 views
7

我有一個bash腳本,需要編寫密碼才能運行程序。其他人可以看到它。有沒有辦法以不太明顯的方式編寫密碼?即使他可以在bash中執行相同的命令並獲得密碼,他也無法在文本中讀取它。在bash中模糊存儲的密碼

今天我這樣做:

PASSWORD="1234567" 
program --pass=$PASSWORD 

我想這樣做

PASSWORD="10101001001010010101010100101" #binary or other code 
NEW_PASS=`decrypt $PASSWORD` 
program --pass=$NEW_PASS 

任何想法?

回答

6

你所要求的不僅是邪惡 - 它只是不會工作

所有用戶需要做的,看看你的密碼是運行bash -x your_script和輸出將包括

+program '--pass=decrypted-password-here' 

...不管如何有效進行模糊可能是。

什麼是你試圖打電話,需要密碼的實際程序?您是否可以將密碼隱藏在setuid包裝器後面,以便包裝器可以讀取密碼文件,即使運行它的用戶不能?您可以(借用DigitalRoss的建議)設置一個用戶帳戶,該用戶帳戶具有存儲的密碼副本(或更好的證書或密鑰對),將其配置爲僅能夠運行腳本,而不通過SSH執行任何操作,那些應該能夠以該用戶的身份運行SSH腳本權限的用戶(或者僅向單個命令提示該用戶,等等)?

等等

簡而言之:瞄準真正的安全,不會混淆。


現在,如果你沒有想混淆 - 傳統的做法是ROT-16:

obfuscated_password="qrpelcgrq-cnffjbeq-urer" 
real_password="$(tr a-zA-Z n-za-mN-ZA-M <<<"$obfuscated_password")" 

...但如果這是你真正關心的任何一個密碼,不混淆 - 使用上述方法之一來避免以用戶可讀的方式存儲密碼。

+0

程序是cURL – Rodrigo 2012-03-22 18:24:41

+1

@Rodrigo ...和curl可以使用客戶端證書(如果您正在爲其進行身份驗證的Web服務器已爲其配置...儘管您仍然需要使用類似setuid包裝的東西來提升權限防止誰可以運行您的程序讀取SSL密鑰調用捲曲)的用戶,它可以在setuid的包裝增加了一個密碼後面的參數調用,並且可以以其它方式使用所有我這裏了與它的方法。 – 2012-03-22 18:28:59

3

A 「不太難」 的方法是使用ROT13

PASSWORD=cnffjbeq 
REAL_PASSWORD=`echo $PASSWORD | rot13` 

如果你沒有一個rot13程序,用tr a-z n-za-m作品一樣好。

請記住,這提供了絕對沒有任何安全。但是,您的「隨意觀看」目的可能已足夠。

5

您可以使用uuencode and uudecode,,它們通常在Unix系統上安裝(並且始終可以通過軟件包輕鬆獲得)。由於編碼沒有意義,因此它可能阻止觀察者容易記憶密碼,即,stealing the password via shoulder-surfing.但是,精心挑選的隨機明文密碼可以完成大致相同的事情,而不會產生虛假的安全錯覺。

這些日子面臨的確切問題是everyone in DevOps,因爲自動配置管理變得越來越必要。

這裏有一些更好的解決方案:

  • 有系統的祕密文件腳本運行上。該腳本可以在運行時從文件中讀取其祕密。通過這種方式,您可以在不傳播密碼的情況下將腳本檢入到源代碼控制中,並且可以使用用戶權限來保護祕密文件。您可以重複使用腳本而不傳播密碼。

  • 使用無密碼SSH公鑰驗證才能到遠程系統

  • 使用與角色限制用戶上述方法的組合。我通常在目標系統上創建一個用戶,除了腳本想要做的事情之外什麼都不能做。現代版本的ssh可以幫助解決這個問題,因爲他們可以忽略傳入的命令(參見sshd_config中的forcecommand或使用something like ssh-forcecommand),並且只是始終執行特定的操作。

  • 通過服務器簽名證書驗證管理代理客戶端。像PuppetChef這樣的真實配置管理系統會爲您做到這一點。

  • 如果要連接到一個網頁,你仍然可以創建角色限制的用戶,或者至少一個的消耗。也許你可以手動登錄一次並建立一個持續的會話。 Curl可以使用cookie並與此方法配合使用。

+3

+1提出了這個角色限制用戶的方式 - 創建其中,在登錄時,可以做什麼,但與存儲的憑據捲曲運行的用戶帳戶(然後使用類似RSA密鑰,以允許調用該用戶身份),是這個問題的一個很好的解決方案,避免了需要構建一個setuid包裝來更直接地升級腳本的權限。 – 2012-03-22 18:33:25

2

把鑰匙放在門墊下面並不安全。 但'程序'需要採取的事實 - 通過......意味着任何做'ps -ef'的人都可以看到它。 如果'程序'具有可以從管道讀取密碼的表單,那麼您應該使用它。 例如程序--pass = - ... < /home/me/.something 並使文件只對您可讀。