以這種方式存儲我的密碼安全嗎?將sudo密碼存儲爲腳本中的變量 - 安全嗎?
echo 'Write sudo password (will not be displayed) and hit enter'
read -s password
我需要它作出這樣的命令:
echo $password | sudo -S apt-get install -y foo bar
以這種方式存儲我的密碼安全嗎?將sudo密碼存儲爲腳本中的變量 - 安全嗎?
echo 'Write sudo password (will not be displayed) and hit enter'
read -s password
我需要它作出這樣的命令:
echo $password | sudo -S apt-get install -y foo bar
不,因爲您可以通過/proc/$PID/cmdline
查看。
我建議不要嘗試重塑安全工具。 sudo
程序可以緩存您的密碼。
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
執行。請把我的答案看作是一個擴展的評論,而不是回答你的問題。
爲什麼使用變量 - 爲什麼不讓sudo處理提示?我認爲第二行應該成爲'sudo -v -S'。保留它的唯一原因是因爲'read -s'不會回顯密碼 - 但是,'sudo'也沒有? – 2010-09-08 12:11:08
@Jonathan:的確如此。但是,這些腳本通常用於在多臺計算機上執行sudo(請參閱此處的示例:http://www.heinzi.at/projects/upgradebest.sh/)。那麼,有意義的是不必多次輸入密碼。 – Heinzi 2010-09-08 12:19:00
足夠公平 - 我忘了解釋爲了在SO上提出問題而最小化。 – 2010-09-08 12:31:00
一個更好的方法是編輯sudoers文件,並添加你的程序不需要密碼...
做一個sudo visudo
並添加以下,以使你的管理員組運行apt-get W/O密碼: %admin ALL = NOPASSWD: /usr/bin/apt-get
查看sudoers手冊頁獲取更多詳細信息。
sudo
是open source,所以你可以編譯自己的版本,它將密碼作爲命令行參數。
我強烈建議不要使用家庭版本的操作系統的重要組成部分,而不要*非常*充分的理由。 (您必須手動應用並重新編譯每個補丁等) – Heinzi 2010-09-08 12:20:50
當echo命令的/ proc條目存在時,可能會有一個非常短的窗口,但「short」是操作術語,在我看來(以毫秒爲單位或更少)。 – 2010-09-08 12:06:14
執行'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
@ZyX - 感謝您對風險的解釋。我以前不會考慮這種解決方案,但是我的情況迫使我使用它。很高興它不像我擔心的那樣不安全。 – MountainX 2013-06-30 02:27:20