
某些應用程式允許將密碼作為參數傳遞。例如:
mysql --user=user_name --password=your_password db_name
安全嗎?除了輸入的密碼將保存在 bash 歷史記錄中之外,某人還可以w
在適當的時候輸入命令,並會看到進程的完整命令行(包括密碼)。
讓我感到非常驚訝的是,每個用戶都可以看到我目前正在執行的命令。
答案1
系統中每個進程的命令列參數都被視為「公共」。當然,不僅是w
命令,而且ps
還有許多其他命令都可以存取該資訊。top
事實上,取得該資訊不需要任何特殊權限。在 Linux 上,您可以透過讀取 來讀取另一個進程的命令列,甚至是屬於另一個使用者的進程/proc/<pid>/cmdline
。
w
這不是或top
或ps
(或)方面的缺陷或不安全行為cat
。相反,責任在於永遠不要在多用戶系統的命令列上傳遞敏感資訊。
大多數能夠在命令列上接受密碼的實用程式都表明不建議這樣做。例如,來自 的線上mysql
說明頁:
在命令列上指定密碼應該被認為是不安全的。請參閱第 5.3.2.2 節「密碼安全的最終使用者指南」。您可以使用選項檔案來避免在命令列上提供密碼。
順便說一句,在環境變數中傳遞密碼或敏感資料並不是那麼明顯的不安全,但在大多數系統上實際上也是不安全的。
答案2
不,在命令列上向程式傳遞密碼並不安全。最好使用:
mohsen@debian:~$ mysql -uuser -p
Enter password:
答案3
雖然它並不安全,但請記住,Linux 現在才二十歲出頭——就像 IT 中的其他事物一樣,安全隱患要么當時還不那麼明確,要么後來才得到解決。
因此,正如其他答案中提到的,不要在命令列上使用密碼。
您還可以(並且可能應該)限制 mountring hidepid` 選項提供的信息procfs with the
,或使用網路安全硬化內核。請注意,這可能會破壞一些東西(可能是 cgroup 和任何依賴它們的東西 - 例如 systemd),至少在撰寫本文時是這樣。