2011-11-30 48 views
2

我寫了一個shell腳本來掛接到一個受密碼保護的數據庫。其他幾個人希望使用相同的shell腳本來共享數據庫訪問權限,但我不想公開正在使用的密碼。有沒有辦法鎖定腳本,以便沒有人可以閱讀它並只執行它?對於他們來說,輸入他們的sudo密碼來運行腳本也是非常理想的。想要只執行shell腳本

回答

6

有沒有一種方法來鎖定腳本,以便沒有人能夠閱讀它,只有 執行呢?這對他們來說也是理想的輸入他們的sudo密碼 來運行腳本

當然。假設包含憑證的腳本是/usr/local/bin/myscript。使該文件由特權用戶擁有。比方說,我們有一個名爲「資格證書」的用戶:

# chown credentials /usr/local/bin/myscript 
# chmod 700 /usr/local/bin/myscript 

現在只有credentials用戶可以讀取並執行這個腳本。

創建一個SQL腳本/usr/local/bin/mywrapper,看起來像這樣:

#!/bin/sh 
exec sudo -u credentials /usr/local/bin/myscript 

,並創建相應/etc/sudoers項:

auser ALL=(credentials) /usr/local/bin/myscript 

所以,現在,用戶auser運行 「mywrapper」。這反過來使用sudo來調用真正的腳本,這將提示auser他們的密碼。

我認爲這可以做你想做的一切。我們在辦公室使用非常類似的機制來保護證書(在我們的案例中,ssh私鑰)。

0

爲了執行shell腳本,您必須能夠讀取它。有幾件事你可以做:

  • 誰管理這個數據庫?用戶是否可以獲取自己的密碼以進行只讀訪問?這將是理想的,因爲它可能限制他們訪問數據庫的一小部分。
  • 如果他們必須具有sudo訪問權限才能運行此腳本,也許可以將密碼從文件中移出並將其移至設置了600個權限的文件中。問題是這可能會泄漏。例如,如果他們使用set -xv運行腳本,該怎麼辦?然後,他們可以在腳本執行時看到密碼。
  • 您可以在數據庫之外創建他們可能感興趣的數據子集嗎?那麼,讓你的腳本訪問?

或者,您可能想要在Perl中查看幾個只讀模塊。我在想像Acme::EyeDropsAcme::Bleach這樣的東西,它會從Perl腳本中刪除所有那些難看的字母和數字。 (我不知道爲什麼Python程序員說Perl是不可讀?)