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 -s
HOME 만 업데이트 됨) /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