Чому $ HOME не змінюється, якщо я використовую судо?


15

Я очікував, що варіант -H дасть мені середовище цільового користувача.

nbest @ geo: ~ $ sudo -H -u tanum echo $ ДОМАШНЯ
/ додому / nbest
nbest @ geo: ~ $ sudo -u tanum echo $ ДОМАШНЯ
/ додому / nbest
nbest @ geo: ~ $ sudo -i -u tanum echo $ ДОМАШНЯ
/ додому / nbest
nbest @ geo: ~ $ sudo -H -i -u tanum echo $ ДОМАШНЯ
/ додому / nbest

Це дозволило б мені сказати:

sudo -u tanum ls ~

і отримати список домашнього каталогу цільового користувача. Не справа. Це спричинено env_resetтиповим режимом у sudoers?

Якщо так, -H чи має вплив? Який найбезпечніший спосіб подолати таку поведінку?

Якщо ні, то який передбачається ефект -H?

Будь ласка, встановіть мене прямо.

Відповіді:


16

$HOMEі ~розширюйтеся вашою оболонкою, вони не трактуються echo.

Іншими словами, echoне розглядає $HOMEяк аргумент. Це насправді бачить /home/nbest. Тому наступні команди точно ідентичні (у вашому випадку):

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

Що б ви не спробувати ( -H, -i, ...) , ви ніколи не отримаєте хотів поведінку. Тому що $HOMEвін замінюється на вашу оболонку, і вона працює як ваш користувач. sudoніяк не впливає на вашу оболонку.


Щоб вирішити цю проблему (яка насправді є особливістю), ви можете запустити нову нижню частину:

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

(Зверніть увагу, що я використовую одинарні лапки, щоб уникнути розширення.) Таким чином, нова оболонка shзапуститься як користувальницький танум і надрукує його домашній каталог.


Іншою альтернативою є використання ~username, яке поширюється на дім цього користувача, без необхідності використання sudoабо su. Спробуйте:

nbest@geo:~$ echo ~tanum

1
Звичайно. Як соромно! sudo do what I mean
Ніл Кращий

1
Це не працює для мене. Наприклад, sudo -H -u buildbot bash -c "echo $HOME"дає мені /home/ubuntu, який є користувачем за замовчуванням для деяких зображень Ubuntu.
Серін

@Cerin використовуйте одинарні лапки, щоб запобігти розширенню:sh -c 'echo $HOME'
Андреа Корбелліні

3

Будь ласка, спробуй:

sudo -H -u tanum bash -c 'echo $HOME'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.