Bash

LS_COLORS 在 sudo su 之後如何持續存在

  • August 15, 2018

我在我的機器上創建了一個使用者名,並將該使用者名添加到 sudoers 文件以具有 root 訪問權限。

我的.bashrc文件還包含一個腳本,它說要更改 PS1 的顏色和 ls 命令的顏色

export PS1="\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] "
export LS_COLORS="di=1:fi=0:ln=31:pi=5:so=5:bd=5:cd=5:or=31:mi=0:ex=35:*.rpm=90"

在腳本結束時,我還有命令sudo su讓我在登錄時直接成為 root。

問題是 PS1 仍然存在並且之後顏色會發生變化,sudo su但 ls 命令仍然是預設命令。我怎樣才能解決這個問題?

以您的普通使用者身份執行sudo -l以查看目前有效的選項。

  • 輸出是否包括env_reset?如果是這樣,在通過sudo. 您可以在文件中使用env_check和/或env_keep關鍵字sudoers來指定允許通過sudo.
  • 輸出是否包括always_set_home?如果是這樣,那麼$HOME環境變數將指向目標使用者的主目錄,即/root在您的情況下。結果,生成的 shell 將執行/root/.bashrc而不是您個人的 shell,同樣所有程序都將在/root/目錄而不是您的個人主目錄下查找其使用者特定的配置文件。

如果sudo -s使用 root.bashrc而不是你個人的,那麼always_set_home很可能是有效的(或者你有一個帶有嚴格 PAM 模組或其他東西的奇怪分佈)。在這種情況下,使用visudo編輯您的 sudoers 文件,並添加以下行之一(選項名稱前的驚嘆號表示“不是”):

  • Defaults !always_set_home取消所有使用者的選項。
  • Defaults>root !always_set_home取消所有轉換到 root 使用者的設置,無論原始使用者是誰。
  • Defaults:johndoe !always_set_home``johndoe為僅原始使用者的轉換取消設置。

順序很重要:最後一個設置獲勝,因此如果您的文件中有任何現有Defaultssudoers,您應該在它們之後添加您的自定義。


如果你連結suafter sudo,它將應用自己的規則,這些規則通常是不可配置的。不同 Linux 發行版和版本之間的行為(甚至可用性)su -p或有所不同。su -m

sudo su意味著從您的普通使用者切換到 root,然後再從 root 切換到 root,從而最大限度地破壞精心調整的個人環境設置而收效甚微。根據您的偏好和 Linux 發行版的選擇,您可以直接或通過對文件中的選項sudo -s進行一些調整來實現相同的目標。Defaults``sudoers

sudo su -,另一方面,是過時的說法“我明確希望環境就像目標使用者(即 root)直接登錄一樣;我不希望我的個人環境的任何痕跡留在結果會話中。” 如果你有一個sudo在這個千年發布的版本,你可以使用它sudo -i來實現它。

在 2010 年代,使用sudo susudo su -可能是肌肉記憶、遵循過時的建議或處理真正的舊系統的唯一原因。您可能應該忘記這兩個命令。

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