Sudo nasıl Ubuntu'da $ HOME değiştirmeyecek ve bu davranışı nasıl devre dışı bırakacak?


38

Ubuntu 12.04'te, sudo -s$ HOME değişkeni değişmediğinde, normal kullanıcım ise regularuserdurum şu şekilde gider:

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

Ubuntu'yu çok uzun zaman önce terk ettim, bu yüzden emin olamıyorum, ama bence bu varsayılan davranış. Yani benim sorularım:

S1. Bu nasıl yapılır? Config nerede?

S2. Nasıl devre dışı bırakabilirim?

Düzenleme: İşleri biraz netleştiren cevaplar için teşekkürler, ancak aradığım cevabı bulmak için birkaç soru eklemeliyim.

Q3. Debian'da sudo -s$ HOME değişkenini değiştirir /root. Gönderen Ben cevaplar almak ve hangi man sudoile kabuk koştu sudo -sverilen biridir /etc/passwd, değil mi?

S4. Ancak hem Ubuntu hem de Debian'da /etc/passwdroot için verilen kabuk /bin/bash. Her iki sistemde de, $ HOME ile ilgili olarak, dosyadaki .profileveya .bashrcdosyadaki farkın nerede olduğunu bulamıyorum , böylece davranış sudo -sfarklılaşıyor. Bu konuda herhangi bir yardımın var mı?


Kendi sorunuzun bir kısmını cevabımla ilgili bir yorumda cevapladınız, ancak ben buraya unix.stackexchange.com/questions/38175/… bağlantısını koyabileceğimi düşündüm . Bence, üçüncü çeyrekte sizin iddianız, bazı kişilerin bir oturum açma kabuğunda olsun ya da olmasın, aynı şekilde hareket etmeleri için profil ve rc dosyalarını ayarlamasıdır. sudoDebian ve Ubuntu arasında farklı davranmanın pek olası olmadığını düşünüyorum .
msw.

@msw Debian's ve Ubuntu's (12.04) arasındaki fark kadarıyla sudo, aslında varsayılan olarak bir fark olduğunu düşünüyorum. Ancak, bir başkası tarafından ayarlanmış ve uzun süredir devam eden bir kutuda olduğum için bahse girmiyorum. Her durumda, ilgilenen herkes için security.stackexchange.com/questions/18369/… ve bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140 buldu .
saat

Yanıtlar:


50

Sudo birçok derleme zamanı konfigürasyon seçeneğine sahiptir. Sürümünüzdeki ayarları ile listeleyebilirsiniz sudo -V. Debian wheezy ve Ubuntu 12.04'teki konfigürasyon arasındaki farklardan biri, HOMEortam değişkeninin Ubuntu'da muhafaza edildiği, ancak Debian'da olmadığı; Her iki dağıtım da, korumanın güvenli olduğu açıkça belirtilmiş birkaç tanesi dışındaki tüm ortam değişkenlerini siler. Böylece , Debian silinirken Ubuntu'da sudo -skoruma sağlar ve ardından onu hedef kullanıcının giriş dizinine ayarlar.HOMEHOMEsudo

sudoersDosyadaki bu davranışı geçersiz kılabilirsiniz . Dosyayı visudodüzenlemek için çalıştırın sudoers. İlgili birkaç seçenek var:

  • env_keephangi ortam değişkenlerinin korunacağını belirler. Kullanım Defaults env_keep += "HOME"arayanın korumak için HOMEortam değişkeni veya Defaults env_keep -= "HOME"silmek için (ve hedef kullanıcının ev dizinine göre değiştirin).
  • env_resetOrtam değişkenlerinin hiç sıfırlanıp sıfırlanmayacağını belirler. Ortam değişkenlerini sıfırlamak çoğu zaman belirli bir komutu çalıştırmaya izin veren kurallar için gereklidir, ancak yine de rastgele komut çalıştırmaya izin veren kurallar için doğrudan güvenlik avantajı yoktur.
  • always_set_home, ayarlanırsa, devre dışı bırakılma veya listede olma HOMEnedeniyle korunmuş olsa bile geçersiz kılınmasına neden olur . Zaten korunmazsa, bu seçeneğin bir etkisi olmaz.env_resetHOMEenv_keepHOME
  • set_homegibidir always_set_home, ancak yalnızca açık bir komutla sudo -sarama yaparken geçerli değildir sudo.

Bu seçenekler, belirli bir kaynak kullanıcı, belirli bir hedef kullanıcı veya belirli bir komut için ayarlanabilir; sudoersAyrıntılar için kılavuza bakınız.

Seçeneği ileterek HOMEverilen bir arama için her zaman geçersiz kılmayı seçebilirsiniz .sudo-H

Kabuk asla değerini geçersiz kılmaz HOME. (Ayarlanmamış HOMEolsaydı kurardı, ama sudoher zaman HOMEbir şekilde veya başka bir şekilde ayarlar .)

Eğer kaçarsan sudo -i, sudobir ilk giriş taklit eder. Bu HOME, hedef kullanıcının giriş dizinine ayarlamayı ve bir giriş kabuğu çağırmayı içerir .


17

Etkileşimli bir giriş kök kabuğu almak için sudo -H -iyerine kullanın sudo -s:

sudo -H -i
cd
pwd -P  #  /private/var/root  (on Mac OS X 10.6.8)

Kimden man sudo:

-H      The -H (HOME) option sets the HOME environment variable to
        the homedir of the target user (root by default) as
        specified in passwd(5).  By default, sudo does not modify
        HOME (see set_home and always_set_home in sudoers(5)).

5

Bunun sudobir "giriş kabuğu" ile "giriş yapmayan kabuk" arasındaki farkla ilgili davranışlarıyla ilgisi yoktur. Hızlı düzeltme

$ sudo -i

görüldüğü gibi:

$ sudo -s
# id
uid=0(root) gid=0(root) groups=0(root)
# echo $HOME
/home/msw
# exit
$ sudo -i
# echo $HOME
/root
# pwd
/root

Sudo kılavuzunda belirtildiği gibi:

-İ (ilk girişi simüle et) seçeneği, hedef kullanıcının şifre veritabanı girişi tarafından belirtilen bir giriş kabuğu olarak belirtilen kabuğu çalıştırır. Bu, .profile veya .login gibi girişe özgü kaynak dosyalarının kabuk tarafından okunacağı anlamına gelir. Bir komut belirtilirse, kabuğun -c seçeneği ile yürütülmek üzere kabuğa geçirilir. Hiçbir komut belirtilmezse, etkileşimli bir kabuk yürütülür.


Ekstra ayrıntılar için teşekkürler, benim için işleri biraz daha netleştirdiler. Sanırım mermiler arasındaki farkı kontrol etmeliyim. Bunu okuyan herkes için, benimle aynı durumda, şunu kontrol edin: unix.stackexchange.com/questions/38175/…
alxs 19:13 de

1
Hayır, sudo'nun değişip değişmediği, sudo'nun HOMEnasıl yapılandırıldığı ile ilgisi var.
Gilles 'SO- kötülük' dur

@Gilles: Peki, sudo nasıl yapılandırılır? İçinde /etc/sudoers, $ HOME ile ilgili olarak Debian ve Ubuntu arasında farklı hiçbir şey yok.
45'te alxs

1
@alxs IIRC Debian ve Ubuntu'da farklı derleme zamanı varsayılanları bulunur. Sen seçenekleri ile geçersiz kılabilirsiniz always_set_homeve set_homeiçinde sudoers.
Gilles 'SO- kötülük yapmayı bırak'

@Gilles: Teşekkürler. Bu tam olarak aradığım cevap, bunun neden olduğu ve nasıl geri alınacağı ile ilgili. Eğer göndermeyi sakıncası yoksa, cevap olarak kabul edeceğim. Kendim yapabilirdim, ama kredi almak istemiyorum.
alxs

2

Kök kabuğu elde etmenin oldukça popüler bir yolu da şunları kullanıyor:

 $ sudo su - 
 # id
 uid=0(root) gid=0(root) groups=0(root)
 # pwd
 /root

Kullanmak kullanmak sudo -i -H, ancak bu git den küresel npm paketi yüklemeden ile başarısız oldu. Bununla sudo su -çalışır! Teşekkür ederim.
Laurent

0

sudo -sSırasıyla Ubuntu ve Debian'daki farklı davranışlardan kurtulmak için bir sudosarmalayıcı kullanabilirsiniz (4. Çeyrek yanıtı):

sudos() {
   local PATH="$(getconf PATH)" root_homedir
   root_homedir="$(sudo -H sh -c 'printf "%s" "$HOME"')"
   sudo sh -c 'export HOME="$0"; exec sh -i' "$root_homedir"
   return 0
}

sudo -k
sudos
{
logname
whoami
id -un
id -ur
echo "PATH: $PATH"
}
exit
echo "PATH: $PATH"
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.