Ubuntu와 Debian은 sudo 권한이있는 사용자를 위해 $ HOME을 어떻게 관리합니까? user <date> <time>

myhome.sh한 줄만 포함 된 bash 스크립트 가 있습니다.

echo $HOME

스크립트 소유자는 사용자입니다.

$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh

에서 우분투 16.04 및 17.10 내가 얻을 :

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ sudo bash myhome.sh
/home/user

에서 데비안 버스터 / 테스트 I 수 :

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

데비안의 스크립트 내부에서 왜 sudo로 실행되면, $HOME=/root우분투에서는 항상 얻을 수 $HOME=/home/user있습니다. 우분투 개발자가 무엇을 바꿨는지 아는 사람이 있습니까?



답변

데비안과 우분투는 모두 환경 변수를 재설정 하는 /etc/sudoers파일을 Defaults env_reset제공합니다.

그러나 $ HOME을 터치 하지 않고 대상 사용자의 홈으로 재설정 하도록 동작 env_reset이 변경되었습니다 .

Ubuntu는 sudo이전 동작을 유지하기 위해 버전을 패치하기로 결정했습니다 .
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140

우분투에서 $ HOME 환경 변수를 대상 사용자로 재설정하려면에 Defaults always_set_home또는 중 하나를 설정해야합니다 Defaults set_home(이 경우 sudo -sHOME 만 업데이트 됨) /etc/sudoers.

우분투 트래커 의이 버그는 sudo에서 $ HOME을 설정하지 않는 것에 대한 더 많은 근거를 가지고 있습니다 :
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495

의견 # 4 참조 :

HOME이 제거되면 vim, bash 등은 사용자의 ~ / .vimrc, ~ / .bashrc 등이 ​​아닌 /root/.vimrc, /root/.bashrc 등을 사용합니다. sudo를 통해 X 클라이언트를 실행하려면 구성 파일의 잘못된 위치를 찾게되며 X11 클라이언트가 잘못된 .Xauthority 파일을 대상으로하는 경우 X11 클라이언트가 X11 서버에 연결하지 못할 수도 있습니다.

우분투 개발자의 의식적인 결정입니다.

이 답변에는 always_set_home다음 과 같은 sudoers 옵션에 대한 자세한 내용이 있습니다 .
https://unix.stackexchange.com/a/91572/281844


귀하의 질문에 두 번째 문제가 있습니다.이 문제 sudo echo $HOME는 데비안에서도 여전히 사용자의 집을 표시합니다.

명령을 실행 $HOME 하기 전에 셸이 확장되어 발생합니다 sudo.

그래서 이건:

$ sudo echo $HOME

먼저 쉘에 의해 다음과 같이 확장됩니다.

$ sudo echo /home/user

그리고 sudo echo /home/user는 루트로 실행 됩니다 …

이것도 차이점을 보여 주어야합니다.

$ sudo bash -c 'echo $HOME'
/root

또는 전체 루트 셸을 가져 와서 환경 변수를 확인하십시오.

$ sudo -s
# echo $HOME
/root


답변