Sudo kullanırsam $ HOME neden değişmez?


15

-H seçeneğinin bana hedef kullanıcının ortamını vermesini bekledim.

nbest @ geo: ~ $ sudo -H -u tanum yankı $ HOME
/ Home / nbest
nbest @ geo: ~ $ sudo -u tanum yankı $ HOME
/ Home / nbest
nbest @ geo: ~ $ sudo -i -u tanum yankı $ HOME
/ Home / nbest
nbest @ geo: ~ $ sudo -H -i -u tanum yankı $ HOME
/ Home / nbest

Bu şunu söylememe izin verir:

sudo -u tanum ls ~

ve hedef kullanıcının ana dizin listesini alın. Durum böyle değil. Bu, içindeki env_resetvarsayılandan mı kaynaklanıyor sudoers?

Eğer öyleyse -H'nin bir etkisi var mı? Bu davranışı geçersiz kılmanın en güvenli yolu nedir?

Değilse -H'nin amaçlanan etkisi nedir?

Lütfen beni düzeltin.

Yanıtlar:


16

$HOMEve ~genişletilebilir olsun senin kabuk, onlar tarafından yorumlanır değildir echo.

Başka bir deyişle, bir argüman olarak echogörülmez $HOME. Aslında görüyor /home/nbest. Bu nedenle, aşağıdaki komutlar tamamen aynıdır (sizin durumunuzda):

nbest@geo:~$ sudo -H -u tanum echo $HOME
nbest@geo:~$ sudo -H -u tanum echo /home/nbest

Ne denerseniz deneyin ( -H,, -i...) asla istenen davranışı elde edemezsiniz. Çünkü $HOMEkabuğunuzla değiştirilir ve kabuğunuz kullanıcı olarak çalışır. sudokabuğunuzu hiçbir şekilde etkilemez.


Bu 'sorun' (aslında bir özellik) üzerinde çalışmak için yeni bir alt kabuk başlatabilirsiniz:

nbest@geo:~$ sudo -H -u tanum sh -c 'echo $HOME'

(Genişlemeyi önlemek için tek tırnak kullandığımı unutmayın.) Bu şekilde, yeni kabuk shkullanıcı tanum olarak çalışacak ve ana dizinini yazdıracaktır.


Bir başka alternatif kullanım etmektir ~usernamekullanarak gerek kalmadan, bu kullanıcı evine genişletilmiş alır, sudoya da su. Deneyin:

nbest@geo:~$ echo ~tanum

1
Elbette. Ne kadar utanç verici! sudo do what I mean
Neil Best

1
Bu benim için işe yaramıyor. Örneğin , bazı Ubuntu görüntülerinde varsayılan kullanıcı olan sudo -H -u buildbot bash -c "echo $HOME"bana veriyor /home/ubuntu.
Cerin

@Cerin genişlemeyi önlemek için tek tırnak kullanın:sh -c 'echo $HOME'
Andrea Corbellini

3

Deneyin lütfen:

sudo -H -u tanum bash -c 'echo $HOME'
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.