如何在 Ubuntu 中將 sudo 設置為不更改 $HOME 以及如何禁用此行為?
在 Ubuntu 12.04 上,當我
sudo -s
沒有更改 $HOME 變數時,所以如果我的普通使用者是regularuser
,情況如下:$ cd $ pwd /home/regularuser $ sudo -s # cd # pwd /home/regularuser
我很久以前就放棄了 Ubuntu,所以我不能確定,但我認為這是預設行為。所以,我的問題是:
Q1。這是怎麼做到的?配置在哪裡?
Q2。如何禁用它?
編輯: 感謝您的答案,這澄清了一些事情,但我想我必須添加幾個問題,以獲得我正在尋找的答案。
Q3。在 Debian
sudo -s
中,將 $HOME 變數更改為/root
. 從我從答案中得到的結果和man sudo
執行的 shellsudo -s
是 中給出的/etc/passwd
,對吧?Q4。但是,在 Ubuntu 和 Debian 上,
/etc/passwd
為 root 提供的 shell 都是/bin/bash
. 在任何一個系統中,就 $HOME 而言,我也找不到.profile
or.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
被禁用或HOME
在env_keep
列表中而被保留,也會導致被覆蓋。如果HOME
不保留此選項,則此選項無效。set_home
類似於always_set_home
,但僅適用於,不適用於使用顯式命令sudo -s
呼叫時。sudo
可以為給定的源使用者、給定的目標使用者或給定的命令設置這些選項;有關詳細資訊,請參閱
sudoers
手冊。您始終可以通過傳遞選項來選擇覆蓋
HOME
給定的呼叫。sudo``-H
shell 永遠不會覆蓋
HOME
. (HOME
如果未設置,它會設置,但sudo
總是設置HOME
一種或另一種方式。)如果您執行
sudo -i
,sudo
則模擬初始登錄。這包括設置HOME
目標使用者的主目錄和呼叫登錄 shell。