Linux

Linux (Ubuntu) 環境變數、shell 和安全性

  • June 3, 2011

我試圖了解一些圍繞在 Ubuntu 10.04 伺服器上的 Apache 下執行的 Web 應用程序的安全性和環境變數的概念。

我想以沒有 shell 或密碼的使用者身份執行一些應用程序(我知道這是個好主意,但我不是專家)。sudo其中一個應用程序是通過系統初始化腳本啟動的 Web 應用程序,其他應用程序是通過開關從命令行臨時啟動的實用程序-u

每個應用程序都需要訪問同一組環境變數。我可以修改啟動每個應用程序的腳本,並在那裡設置環境變數,但如果環境變數是以某種方式為執行應用程序的使用者設置的,我會更喜歡它。

我的問題是:

是否可以為沒有外殼的使用者設置“每個使用者”環境變數?我已經閱讀了“在 Debian 上為沒有登錄 shell 的服務設置環境變數”,但給定的解決方案與修改我的每個應用程序腳本基本相同。

如果我無法為每個使用者設置環境變數,那麼為使用者提供 shell 會帶來哪些安全風險?

對於這種可能很常見的情況,如果有的話,有什麼替代方案或建議?

使用配置文件並通過應用程序的啟動腳本添加變數確實是處理此問題的正確方法。如果您需要為非 shell 腳本或二進製文件(如 perl、python 或 java)提供某些環境變數,您可以使用 shell 包裝器呼叫它們,提供所需的變數,然後提供exec真正的腳本。

如果您的應用程序是由某種腳本啟動的,那麼它必須通過呼叫 shell(文件頂部的 shebang)來啟動,即使使用者沒有登錄 shell。因此,您可以像對待普通使用者一樣通過 shell 的 rc 文件修改環境變數。我相信您仍然需要插入 BASH_ENV 變數來觸發 rc 文件,因為您以非互動方式呼叫腳本。

我強烈建議您使用前一種方法,並為應用程序創建某種配置。從長遠來看,這將更容易管理。

引用自:https://serverfault.com/questions/276240