我有幾個關于 mysql 容器中的密碼安全性的問題。我使用mysql/mysql-server:8.0 image。
第一個問題是
基于上圖在 mysql 容器中使用 MYSQL_PASSWORD env var 是否安全?我在下面詳細說明了這一點。
我通過k8s env var注入為mysql容器設定mysql密碼,即通過k8s清單檔案中的env var使用k8s secrets在mysql容器中設定MYSQL_PASSWORD env var。這安全嗎?這是我的第一個問題。此頁面中的下表說明使用 MYSQL_PWD(注意這不是 MYSQL_PASSWORD)env var 非常不安全,因為 ps cmd 可以顯示正在運行的行程的環境,并且任何其他用戶都可以利用它。這是否也適用于使用 MYSQL_PASSWORD 而不是 MYSQL_PWD 的容器情況?
第二個問題是
mysql -h 127.0.0.1 -p${MYSQL_PASSWORD}在同一個 mysql 容器中運行是否安全?
我需要在 k8s 就緒探針中運行類似的 cmd。此頁面的警告部分說運行mysql -phard-coded-password不安全。即使像上面那樣使用 env var,我也不確定密碼是否仍然不安全,我也不確定此警告是否適用于容器案例。
提前致謝!
uj5u.com熱心網友回復:
如果您的安全問題包括保護您的資料庫免受對主機具有合法登錄訪問權限的攻擊者的攻擊,那么最安全的選擇是在檔案中傳遞資料庫憑據。原則上,命令列選項和環境變數都可以通過ps.
對于資料庫容器,標準的 Docker Hub 鏡像沒有以這種方式提供憑據的路徑。如果您在其他地方創建初始資料庫,然后將生成的資料目錄掛載到您的生產系統上(將其視為恢復備份),那么您將不需要設定任何初始資料變數。
here$ docker run -it -v "$PWD/mysql:/var/lib/mysql" -e MYSQL_PASSWORD=... mysql
^C
here$ scp -r ./mysql there:
here$ ssh there
# without any -e MYSQL_*=... options
there$ docker run -v "$PWD/mysql:/var/lib/mysql" -p 3306:3306 mysql
更廣泛地說,我在這里還要考慮另外兩件事:
任何可以運行任何
docker命令的人都可以很容易地 root 整個主機。因此,如果您向具有登錄權限的任何人廣泛授予 Docker 套接字訪問權限,他們可以輕松找到憑據(如果沒有別的,他們可以在容器中docker exec使用cat命令轉儲憑據檔案)。ENVDockerfile 中的任何指令都將在獲取映像副本的任何人中可見docker history并輸出給任何人。docker inspect永遠不要在 Dockerfile 中放置任何型別的憑據!
實際上,我建議,如果您如此擔心您的資料庫憑據,那么您可能正在處理某種生產系統;如果您正在處理一個生產系統,那么可以登錄它的一組人是有限且值得信賴的。在這種情況下,環境變數設定不會向任何無法讀取它的人公開憑據。
(在 Kubernetes Pod 的環境變數由 Secret 注入的更具體的情況下,在大多數情況下,幾乎沒有人可以登錄訪問單個節點,并且 Secret 可以受到 Kubernetes RBAC 的保護。如果設定,這非常安全,不會被窺探正確起來。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/474333.html
上一篇:OAuth2應用程式中的Google客戶端密碼可以訪問哪些內容?
下一篇:比較EL中的列舉值失敗
