Hem Debian hem de Ubuntu , ortam değişkenlerini sıfırlayan bir /etc/sudoers
dosya içeriyor Defaults env_reset
.
Ancak, davranışı env_reset
değ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_home
da Defaults set_home
(bu durumda yalnızca sudo -s
HOME'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 $HOME
bu 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/user
root 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