Ubuntu

如何在 Ubuntu 中將 sudo 設置為不更改 $HOME 以及如何禁用此行為?

  • September 22, 2013

在 Ubuntu 12.04 上,當我sudo -s沒有更改 $HOME 變數時,所以如果我的普通使用者是regularuser,情況如下:

$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser

我很久以前就放棄了 Ubuntu,所以我不能確定,但我認為這是預設行為。所以,我的問題是:

Q1。這是怎麼做到的?配置在哪裡?

Q2。如何禁用它?

編輯: 感謝您的答案,這澄清了一些事情,但我想我必須添加幾個問題,以獲得我正在尋找的答案。

Q3。在 Debiansudo -s中,將 $HOME 變數更改為/root. 從我從答案中得到的結果和man sudo執行的 shellsudo -s是 中給出的/etc/passwd,對吧?

Q4。但是,在 Ubuntu 和 Debian 上,/etc/passwd為 root 提供的 shell 都是/bin/bash. 在任何一個系統中,就 $HOME 而言,我也找不到.profileor.bashrc文件的差異所在,因此行為sudo -s不同。對此有什麼幫助嗎?

Sudo 有許多編譯時配置選項。您可以使用 列出您的版本中的設置sudo -V。Debian wheezy 和 Ubuntu 12.04 中的配置之間的差異之一是HOME環境變數在 Ubuntu 中保留,但在 Debian 中不保留;這兩個發行版都會刪除所有環境變數,除了一些明確標記為可以安全保存的變數。因此在 Ubuntu 上sudo -s保留HOME,而在 DebianHOME上被擦除,sudo然後將其設置為目標使用者的主目錄。

sudoers您可以在文件中覆蓋此行為。執行visudo以編輯sudoers文件。有幾個相關的選項:

  • env_keep確定保留哪些環境變數。用於Defaults env_keep += "HOME"保留呼叫者的HOME環境變數或Defaults env_keep -= "HOME"將其擦除(並將其替換為目標使用者的主目錄)。
  • env_reset確定是否完全重置環境變數。對於允許執行特定命令的規則,重置環境變數通常是必要的,但對於允許執行任意命令的規則沒有直接的安全優勢。
  • always_set_home,如果設置,HOME即使它由於env_reset被禁用或HOMEenv_keep列表中而被保留,也會導致被覆蓋。如果HOME不保留此選項,則此選項無效。
  • set_home類似於always_set_home,但僅適用於,不適用於使用顯式命令sudo -s呼叫時。sudo

可以為給定的源使用者、給定的目標使用者或給定的命令設置這些選項;有關詳細資訊,請參閱sudoers手冊。

您始終可以通過傳遞選項來選擇覆蓋HOME給定的呼叫。sudo``-H

shell 永遠不會覆蓋HOME. (HOME如果未設置,它會設置,但sudo總是設置HOME一種或另一種方式。)

如果您執行sudo -isudo則模擬初始登錄。這包括設置HOME目標使用者的主目錄和呼叫登錄 shell

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