Security
管道密碼和安全性
我有時會
echo "secret" | mysql -u root -p ...
。現在我擔心這裡的安全性:列出所有程序的人可以看到密碼嗎?為了檢查我嘗試過的,
echo "test" | sleep 1000
帶有秘密的 echo 命令在“ps aux”的輸出中不可見。所以我認為它是安全的——但是請安全專家確認一下嗎?:)
這個問題的答案取決於您使用的 shell。許多 shell 具有
echo
內置命令,這意味著它不會產生單獨的程序,因此不會出現在程序列表中。但是,如果您鍵入/bin/echo
or./echo
或者如果您使用該命令禁用內置enable -n echo
命令,則 shell 將不會使用其內置命令,而是使用二進製版本。這將顯示在程序列表中。如果您使用的是二進製文件而不是內置的 shell,則只要將數據移動到其他程序的 STDIN 緩衝區中,echo 命令就會顯示出來。這個緩衝區的大小是有限的,所以如果緩衝區中的數據多於容納不下的數據,則回顯命令將不得不等待一段時間,直到其他程序可以從緩衝區中讀取一些數據。對於大多數情況(例如您上面給出的兩個範例),此時間段將是微秒。如果您碰巧使用 echo 將 20MB 的 SQL 轉儲粘貼到 MySQL,這可能會更長。無論時間有多短,如果您使用的是二進製而不是內置的 shell,並且有人恰好掌握了時間,他們將能夠在程序列表中看到該程序。
您可以通過將秘密數據放入文件(具有適當權限)並將文件用作 STDIN 來避免這種情況,如下所示:
mysql -u root -p < file_with_secret.sql