답변:
SSH가 로그인 쉘을 시작합니다. su
기본적으로는 그렇지 않습니다.
특히, 이는 ~/.profile
해당 사용자 의 (또는 유사한 파일)이 소스되지 않았 음을 의미합니다 . 따라서 변경 사항 ~/.profile
이 적용되지 않습니다. 다음과 같은 경우도있을 수 있습니다.
~/.profile
환경 에서 다른 변경이 이루어졌으며 이로 인해 사용자 환경이 오염 될 수 있습니다.
/etc/profile
및 /etc/profile.d/*
(하지만하지 기본적으로) 다른 사용자에 대해 다른 설정을 적용 할 수있다PAM 구성이 다릅니다. 예를 들어, /etc/pam.d/ssh
이 있습니다 :
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
반면 /etc/pam.d/su
:
session required pam_env.so readenv=1 envfile=/etc/default/locale
이것은 SSH가로드 ~/.pam_environment
되지만 su
그렇지는 않음을 의미합니다 . ~/.pam_environment
환경 변수를위한 셸 독립 위치이므로 GUI, TTY 또는 SSH에서 로그인 할 때 적용 되기 때문에 이것은 큰 것 입니다.
로그인 쉘을 시작하려면 다음 중 하나를 실행하십시오.
su - <username>
sudo -iu <username>
예:
# su muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# su - muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /home/muru/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# sudo -iu muru sh -c 'echo $HOME $PATH'
/home/muru /home/muru/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# sudo -u muru sh -c 'echo $HOME $PATH'
/root /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ssh muru@localhost 'echo $HOME $PATH'
/home/muru /home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
SSH를 사용하더라도 셸을 시작하는 대신 명령을 실행하면 로그인 셸이 실행되지 않습니다 ( 및 ~/bin
SSH에 SSH 테스트 가 없음에 유의하십시오 ). 실제 결과를 얻으려면 로그인 쉘로 쉘을 실행합니다.su -
sudo -i
# ssh muru@localhost '$SHELL -ilc "echo \$HOME \$PATH"'
/home/muru /home/muru/bin:/home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
이 이유도 sudo su
및 sudo -s
루트 쉘을 얻기의 엉터리 가지 방법이 있습니다. 이 두 가지 방법 모두 환경에 의해 오염됩니다.
관련 :
전반적으로 그것은 주로 전략적 차이입니다.
수퍼 유저로 로그인 한 경우 언제든지 변경할 수 있습니다. 즉 치명적인 실수로부터 보호 할 수 없으므로 안전을 위해 일시적으로 다른 사용자로 변경해야합니다.
반면에, 제한된 권한으로 로그인 한 경우 일시적으로 해당 권한에 액세스하기 위해 루트로 전환해야하지만 이제는 안전한 사용자에게 기본 폴백 위치를 가지므로 치명적인 실수의 위험을 피할 수 있습니다 .
따라서 차이점은 기술적 인 것이 아니라 실제로 전략적인 것입니다.