沒有~/.bash_profile設定環境變數是什麼狀態?

沒有~/.bash_profile設定環境變數是什麼狀態?

LWN.net - GNOME、Wayland 和環境變量

儘管斯特羅德希望轉向環境變數的「現代」解決方案,但他顯然感受到了來自損壞系統的更廣泛暴露所帶來的壓力。因此,截至撰寫本文時,他對該錯誤的最新評論是:“是的,我正在考慮放棄這一點。”因此Fedora 25很可能會看到一個更新,將登入shell還原到登入過程中; 「適當的修復」將等待稍後。

現在是 Fedora 28...我們在「正確修復」方面處於什麼位置?是否有一種前瞻性的方法讓使用者為其會話設定環境變數?

即可以在 Fedora 上工作的替代品~/.bash_profile,希望在其他地方也可以工作。

答案1

對於 GNOME 3.24,Strode恢復的 gnome 會話透過執行登入 shell 載入環境變數。

在同一則評論中,他們包含了 gnome-session 的補丁,以將這些會話環境變數推送到 systemd 使用者服務。這些包括gnome-terminal,所以它相當重要:)。


GDM 會話啟動器已經修補過的在 3.22 中,從 導入環境systemd --user。因此systemd環境被匯入到會話中,然後由登入shell修改,結果也被複製回systemd --user.

應該可以正常工作...除了在 Fedora 28 上進行測試之外,它不能正常工作,例如 PATH,因為 gdm 會話啟動器不允許 systemd 環境變數覆蓋預先存在的環境。我已在 GNOME 問題追蹤器上報告了該問題

它是同意login適用於文字控制台)可以在啟動使用者 shell 之前接受一些補丁來載入環境配置,但到目前為止沒有任何變化實用程式Linux v2.32

我甚至沒有費心去尋找 ssh 補丁:)。

systemd 環境已經可以在user.conf.作為這項工作的一部分,systemd v233獲得一種格式,現在支援在現有或搜尋清單environment.d/中新增額外的目錄。PATHLD_LIBRARY_PATH


我認為為用戶登入設定環境變數的最佳位置是在 PAM 模組中 - 我們甚至已經這樣做了pam_env邏輯是

要求登入、gdm、sshd(這永遠不會發生)等來做到這一點確實是一個糟糕的解決方案。

不幸的是,發行版之間的配置pam_env令人煩惱地不一致......而且似乎有一個很好的理由。~/.pam_environment特點被認為是安全的大“槍”。也可以看看CVE-2010-4708

看看pam_exec例如。您可以想像系統管理員使用它來進行一些登入後配置或其他操作,但使用者可以透過設定 LD_PRELOAD 來獲得 root 權限。或者 pam_selinux 實際上直接使用 pam_getenv,因此用戶可能會搞砸它。但我的觀點並不是這些具體的例子,它只是為了說明以root 身份執行此操作存在風險,並且我們可以完全繞過這些風險,消除一整類潛在的安全錯誤,方法是稍後再執行此操作。作為一般規則,如果您不需要程式碼以 root 身分運行,則它不應該以 root 身分運行!當然,我仍然很困惑,因為從邏輯上講,稍後再做會更尷尬,但毫無疑問,以 root 身份執行此操作比以用戶身份執行此操作風險更大。

pam_exec 手冊明確指出:“pam_exec 呼叫的命令需要知道用戶可以控制[原文如此]環境。”

關於。 pam_env,注意 fedora 將其置於 pam 堆疊頂部並預設為停用 ~/.pam_environment。

將其放在堆疊頂部是一個錯誤,並且違反了不要這樣做的明確警告:“由於 PAM 環境變數的設定可能會對其他模組產生副作用,因此該模組應該是堆疊上的最後一個。”

[...]考慮到這裡的混亂,這顯然是一把步槍

使用 shell 配置的整體想法似乎也適用於 Ubuntu Desktop 16.04 圖形登入。然而,有一點不同。 Fedora~/.bash_profile預設創建,這(對於 bash)會~/.profile被忽略。 Ubuntu 和其他基於 Debian 的發行版~/.profile是預設創建的。 (即,當您建立新使用者時,會從 中提供這些檔案/etc/skel)。

(我最近在 Ubuntu 上使用過這個。Ubuntu 似乎隨著時間的推移而發生了變化,為 GUI 會話運行登入 shell。例如,參見https://superuser.com/questions/183870/difference- Between-bashrc-and-bash-profile/183980#183980,https://askubuntu.com/questions/40287/etc-profile-not-being-sourced,“為什麼 gnome-terminal 不是登入 shell”, 和“shell 登入意味著什麼('bash -l')”)。

相關內容