sudo를 사용하면 $ HOME이 바뀌지 않는 이유는 무엇입니까?


15

-H 옵션이 대상 사용자 환경을 제공 할 것으로 예상했습니다.

nbest @ geo : ~ $ sudo -H -u 타넘 에코 $ 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 타넘 에코 $ HOME
/ home / 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이 사용자 tanum으로 실행되고 홈 디렉토리가 인쇄됩니다.


또 다른 대안은 사용하는 것입니다 ~username사용하지 않고, 해당 사용자의 홈으로 확장됩니다, sudo또는 su. 시험:

nbest@geo:~$ echo ~tanum

1
물론이야. 얼마나 당황 스럽습니까! sudo do what I mean
Neil Best

1
이것은 나를 위해 작동하지 않습니다. 예를 들어 일부 Ubuntu 이미지의 기본 사용자 인 sudo -H -u buildbot bash -c "echo $HOME"me을 제공합니다 /home/ubuntu.
Cerin

@Cerin은 확장을 막기 위해 작은 따옴표를 사용합니다 :sh -c 'echo $HOME'
Andrea Corbellini

3

시도하십시오 :

sudo -H -u tanum bash -c 'echo $HOME'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.