Shell-Script

為什麼通過環境變數傳遞秘密被認為“非常不安全”?

  • August 6, 2021

根據MySQL 文件,通過環境變數將秘密(密碼)傳遞給程序被認為是“非常不安全的”,並且是跨其他資源的糟糕選擇(從安全方面)。

我想知道為什麼 - 我錯過了什麼?在提到的 MySQL 手冊中(我以此為例),通過-p命令行選項傳遞密碼被認為是“不安全的”,通過 env var 被認為是“非常不安全”,粗斜體字型。

我不是專家,但我知道基本原理:簡單的ps命令,即使是由非特權使用者發出的命令,也會讀取每個程序以及命令參數**,而只有同一個使用者**(當然還有 root)可以讀取程序的環境。因此,只有root並且johndoe可以讀取johndoe啟動程序的環境,而被黑www-data腳本讀取所有通過ps.

這裡一定有一些我想念的大事 - 所以請解釋一下我想念什麼?

我的目標是有一種方法將秘密從一個程序轉移到另一個程序,通常是非互動式的。

極其不安全,不應使用。某些版本的 ps 包含一個選項來顯示正在執行的程序的環境。在某些系統上,如果您設置了 MYSQL_PWD,您的密碼會暴露給執行 ps 的任何其他使用者。


這在此處進行了解釋(通過):

背景:在過程圖像 argv

$$ $$和環境$$ $$以相同的方式儲存,彼此相鄰。在“經典”UNIX 中,/usr/bin/ps 通常是 setgid “kmem”(或類似組),這允許它在 /dev/kmem 中探勘以讀取有關活動程序的資訊。這包括讀取系統上所有使用者的程序參數和環境的能力。 這些天來,這些“特權 ps hack”在很大程度上已經落後於我們:UNIX 系統都提出了查詢此類資訊的不同方法(Linux 上的 /proc 等)我認為所有這些(?)都認為程序的環境只是可讀的通過它的 uid。因此,環境中的密碼等安全敏感數據不會洩露。

但是,舊方法並非 100% 死掉。舉個例子,這是一個來自我有權訪問的 AIX 5.2 機器的範例,它以非 root 使用者身份執行

$$ AIX 5.2 reached end-of-life in 2009. AIX, at least by 6100-09, and also confirmed on 7.2, now prevents non-root users from seeing the environment of other users’ processes with the “ps ewwwax” command. $$ …

作為記錄,不久前我們發現(在 IRC 上?)OpenBSD 5.2 具有將環境洩露給其他本地使用者的確切安全漏洞(不過,它在發布後不久就修復了)。

$$ OpenBSD 5.2 was released in 2012 $$ 這並不能解釋為什麼 MySQL 手冊認為使用環境變數與命令行參數相比是**極其不安全的。**請參閱此問題的其他答案。簡而言之,要麼是手冊混亂,要麼就是環境變數太容易被誤“洩露”。

引用自:https://unix.stackexchange.com/questions/369566