Ubuntu ve Debian, sudo ayrıcalıklarına sahip kullanıcılar için $ HOME'u nasıl yönetiyor?


39

myhome.shSadece bir satır içeren bir bash betiğim var :

echo $HOME

Komut dosyasının sahibi bir kullanıcıdır:

$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh

In Ubuntu 16.04 ve 17.10 alıyorum:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ sudo bash myhome.sh
/home/user

In Debian Buster / Test alıyorum:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

Neden Debian'da senaryo içinde, sudo ile çalıştırılırsa, her zaman $HOME=/rootUbuntu'da olduğumu anlamıyorum $HOME=/home/user. Ubuntu geliştiricilerinin neyin değiştiğini bilen var mı?

Yanıtlar:


68

Hem Debian hem de Ubuntu , ortam değişkenlerini sıfırlayan bir /etc/sudoersdosya içeriyor Defaults env_reset.

Ancak, davranışı env_resetdeğiştirildi değil hedef kullanıcının ev sıfırlayarak için dokunaklı $ HOME.

Ubuntu sudoönceki davranışlarını sürdürmek için sürümlerini düzeltmeye karar verdi : https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140

Ubuntu'da, $ HOME ortam değişkenini hedef kullanıcıya sıfırlamak için birinin ya Defaults always_set_homeda Defaults set_home(bu durumda yalnızca sudo -sHOME'un güncellenmesini sağlayacak) ayarlaması gerekir /etc/sudoers.

Ubuntu izleyicideki bu hata, sudo'da $ HOME ayarlamama konusunda biraz daha mantıklı: https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495

Yorum 4'e bakınız:

HOME kaldırılırsa, örneğin vim, bash, vb., Kullanıcının ~ / .vimrc, ~ / .bashrc, vs. yerine /root/.vimrc, /root/.bashrc vb. Kullanacaktır. Kötü bir fikir olsa da X istemcilerini sudo üzerinden çalıştırmak için yapılandırma dosyaları için yanlış konumlara bakmaları muhtemeldir ve X11 istemcilerinin yanlış .Xauthority dosyasına yönelik olmaları durumunda X11 sunucusuna bile bağlanamadıkları ihtimali vardır.

Ubuntu geliştiricilerin bilinçli bir kararı.

Bu cevap, sudoers seçenekleri gibi daha fazla ayrıntıya sahiptir always_set_home: https://unix.stackexchange.com/a/91572/281844


Sorunuzda ikinci bir sorun var, ki sudo echo $HOMEbu hala kullanıcının evini Debian'da bile görüntülüyor.

Bunun nedeni , komutu çalıştırmadan $HOME önce kabuğun genişlemesidir sudo.

Yani bu:

$ sudo echo $HOME

İlk önce kabuk tarafından genişletilir:

$ sudo echo /home/user

Ve sonra sudo echo /home/userroot olarak çalıştırılıyor ...

Bu da farkı göstermelidir:

$ sudo bash -c 'echo $HOME'
/root

Veya tam bir kök kabuğu alın ve ortam değişkenini burada görün:

$ sudo -s
# echo $HOME
/root
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.