Mengapa $ HOME tidak berubah jika saya menggunakan sudo?

15

Saya mengharapkan opsi -H untuk memberi saya lingkungan pengguna target.

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

Ini akan memungkinkan saya untuk mengatakan:

sudo -u tanum ls ~

dan dapatkan daftar direktori home pengguna target. Bukan kasusnya. Apakah ini disebabkan oleh env_resetdefault di sudoers?

Jika demikian, apakah -H punya efek? Apa cara teraman untuk mengesampingkan perilaku ini?

Jika tidak, apa efek yang diharapkan dari -H?

Tolong luruskan saya.

Neil Terbaik
sumber

Jawaban:

16

$HOMEdan ~diperluas oleh shell Anda , mereka tidak ditafsirkan oleh echo.

Dengan kata lain, echotidak melihat $HOMEsebagai argumen. Itu benar-benar melihat /home/nbest. Oleh karena itu perintah berikut persis sama (dalam kasus Anda):

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

Apa pun yang Anda coba ( -H,, -i...) Anda tidak akan pernah mendapatkan perilaku yang diinginkan. Karena $HOMEdigantikan oleh shell Anda dan shell Anda berjalan sebagai pengguna Anda. sudotidak mempengaruhi shell Anda dengan cara apa pun.


Untuk mengatasi 'masalah' ini (yang sebenarnya adalah fitur), Anda dapat memulai subkulit baru:

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

(Perhatikan bahwa saya menggunakan tanda kutip tunggal untuk menghindari ekspansi.) Dengan cara ini, shell baru shakan berjalan sebagai tanum pengguna dan mencetak direktori rumahnya.


Alternatif lain adalah menggunakan ~username, yang diperluas ke rumah pengguna itu, tanpa perlu menggunakan sudoatau su. Mencoba:

nbest@geo:~$ echo ~tanum
Andrea Corbellini
sumber
1
Tentu saja. Sangat memalukan! sudo do what I mean
Neil Best
1
Ini tidak berhasil untuk saya. misalnya sudo -H -u buildbot bash -c "echo $HOME"memberi saya /home/ubuntu, yang merupakan pengguna default pada beberapa gambar Ubuntu.
Cerin
@Cerin menggunakan tanda kutip tunggal untuk mencegah ekspansi:sh -c 'echo $HOME'
Andrea Corbellini
3

Silakan coba:

sudo -H -u tanum bash -c 'echo $HOME'
tpf
sumber