2010-09-08 44 views

回答

10

不,因爲您可以通過/proc/$PID/cmdline查看。

我建議不要嘗試重塑安全工具。 sudo程序可以緩存您的密碼。

+2

當echo命令的/ proc條目存在時,可能會有一個非常短的窗口,但「short」是操作術語,在我看來(以毫秒爲單位或更少)。 – 2010-09-08 12:06:14

+1

執行'strace -o bash.strace -f bash -c'echo password | cat''並檢查文件'bash.strace'。你會看到'execve(「/ bin/cat」,[「cat」],[/ * 53 vars * /])= 0'這一行,但你不會在那裏看到回顯(第一行除外)它傳遞給bash):這是一個bash內建的。所以,在bash中啓動腳本就足以保證它的安全。 – ZyX 2010-09-08 21:59:52

+0

@ZyX - 感謝您對風險的解釋。我以前不會考慮這種解決方案,但是我的情況迫使我使用它。很高興它不像我擔心的那樣不安全。 – MountainX 2013-06-30 02:27:20

4
echo $password | sudo -S apt-get install -y foo bar 

這是有點危險。如果用戶已經通過sudo身份驗證,sudo不會再次請求密碼,它將被轉發到apt-get,可能會導致奇怪的結果(例如,如果postinstall腳本提出問題)。我建議使用

sudo -k       # remove previous sudo timestamp 
echo $password | sudo -v -S  # create a new one for 15 minutes 
sudo apt-get ...    # execute the command 

改爲。

編輯:德克是正確的密碼在很短的時間內可見,而echo執行。請把我的答案看作是一個擴展的評論,而不是回答你的問題。

+0

爲什麼使用變量 - 爲什麼不讓sudo處理提示?我認爲第二行應該成爲'sudo -v -S'。保留它的唯一原因是因爲'read -s'不會回顯密碼 - 但是,'sudo'也沒有? – 2010-09-08 12:11:08

+0

@Jonathan:的確如此。但是,這些腳本通常用於在多臺計算機上執行sudo(請參閱此處的示例:http://www.heinzi.at/projects/upgradebest.sh/)。那麼,有意義的是不必多次輸入密碼。 – Heinzi 2010-09-08 12:19:00

+0

足夠公平 - 我忘了解釋爲了在SO上提出問題而最小化。 – 2010-09-08 12:31:00

11

一個更好的方法是編輯sudoers文件,並添加你的程序不需要密碼...

做一個sudo visudo並添加以下,以使你的管理員組運行apt-get W/O密碼: %admin ALL = NOPASSWD: /usr/bin/apt-get

查看sudoers手冊頁獲取更多詳細信息。

-1

sudoopen source,所以你可以編譯自己的版本,它將密碼作爲命令行參數。

+2

我強烈建議不要使用家庭版本的操作系統的重要組成部分,而不要*非常*充分的理由。 (您必須手動應用並重新編譯每個補丁等) – Heinzi 2010-09-08 12:20:50