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
존재하다데비안 버스터/테스트나는 얻다:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
# WHY ?
$ sudo bash myhome.sh
/root
$HOME=/root
Debian 스크립트에서 sudo로 실행하면 항상 Ubuntu에 들어가는 이유를 이해할 수 없습니다 $HOME=/home/user
. Ubuntu 개발자가 무엇을 변경했는지 아는 사람이 있습니까?
답변1
Debian과 Ubuntu 모두 환경 변수를 재설정하는 /etc/sudoers
파일이 포함 되어 있습니다.Defaults env_reset
그러나 의 동작은 env_reset
다음과 같이 변경되었습니다.아니요$HOME
대상 사용자의 집으로 재설정 하려면 클릭하세요 .
19.04 이전 버전에서 Ubuntu는 sudo
이전 동작을 유지하기 위해 버전을 패치했습니다(변경되지 않음 $HOME
).
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
이는 19.10에서 제거되었으며 그 이후 Ubuntu는 sudo
업스트림 및 기타 모든 Linux 배포판이 수행하는 작업을 수행하고 $HOME
대상 사용자를 변경합니다. 자세한 내용은 askubuntu.com의 Q&A를 참조하세요.19.10부터 sudo는 $HOME을 어떻게 다르게 처리합니까?. 이전 버전은 되돌려지지 않았으므로 18.04 LTS에는 여전히 Ubuntu 관련 동작이 있습니다.
다음은 18.04 LTS를 포함하여 Ubuntu 19.04 이전 버전에 적용되는 이 답변의 이전 텍스트입니다.
Ubuntu에서 $HOME 환경 변수를 대상 사용자로 재설정하려면 해당 변수가 Defaults always_set_home
.Defaults set_home
sudo -s
/etc/sudoers
Ubuntu 추적기의 이 버그에는 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 서버에 연결하지 못할 수도 있습니다.
이는 Ubuntu 개발자의 의식적인 결정입니다.
이 답변에는 sudoers 옵션에 대한 자세한 내용이 있습니다 always_set_home
. 예를 들면 다음과 같습니다.https://unix.stackexchange.com/a/91572/281844
귀하의 질문에는 두 번째 문제가 있습니다. sudo echo $HOME
데비안에서도 여전히 사용자의 홈 페이지가 표시됩니다.
이는 쉘이 확장되기 때문에 발생합니다.$HOME
앞으로sudo
명령을 실행하십시오 .
그래서 이거:
$ sudo echo $HOME
먼저 쉘에 의해 다음과 같이 확장되었습니다.
$ sudo echo /home/user
그런 다음 echo /home/user
루트로 sudo를 실행하십시오.
이는 또한 차이점을 보여줍니다.
$ sudo bash -c 'echo $HOME'
/root
또는 전체 루트 셸을 가져와서 거기에서 환경 변수를 확인하세요.
$ sudo -s
# echo $HOME
/root