루트 계정이 비활성화된 시스템에서 루트 셸을 시작하려면 다음 명령 중 하나를 실행할 수 있습니다.
sudo -i
: 대화형 로그인 셸 실행(읽기/root/.bashrc
및/root/.profile
)sudo -s
: 비로그인 대화형 셸 실행(읽기/root/.bashrc
)
sudo su
우분투 세계에서는 이것이 루트 쉘을 얻는 방법으로 제안되는 것을 자주 봅니다 . 하나의 명령으로 충분할 때 두 개의 별도 명령을 실행하는 이유는 무엇입니까? 내가 아는 한, sudo -i
그것은 와 동등 sudo su -
하고 sudo -s
동일 합니다 sudo su
.
유일한 차이점은 다음과 같습니다( sudo -i
왼쪽과 sudo su -
오른쪽 비교).
sudo -s
(왼쪽)과 (오른쪽) 비교 sudo su
:
SUDO_foo
변수 및 를 무시하는 주요 차이점은 버전 의 시스템 변수 LS_COLORS
인 것 같습니다 .XDG_foo
sudo su
다소 우아하지 않은 케이스를 사용해야 하는 그런 차이가 있습니까 sudo su
? 사람들에게 달리기가 전혀 의미가 없거나 sudo su
뭔가를 놓치고 있다고 안전하게 말할 수 있습니까?
답변1
질문에서 말씀하셨듯이 가장 큰 차이점은 환경입니다.
sudo su -
그리고sudo -i
sudo su -
로그인 셸인 경우 를 실행 하면 /etc/profile
루트의 홈 디렉터리에 있고 루트 환경을 갖게 됩니다..profile
.bashrc
sudo -i
sudo su -
(초기 로그인 시뮬레이션) 옵션과 거의 동일하며 -i
대상 사용자의 비밀번호 데이터베이스 항목에 지정된 쉘을 로그인 쉘로 실행합니다. 이는 로그인별 리소스 파일(예 .profile
: .bashrc
또는 ) .login
이 셸에서 읽고 실행된다는 의미입니다.
sudo su
그리고sudo -s
sudo su
sudo
명령으로 호출됩니다 su
. Bash는 대화형 비로그인 셸로 알려져 있습니다. 따라서 bash
을 실행하면 .bashrc
루트로 전환한 후에도 여전히 동일한 디렉터리에 있음을 알 수 있습니다.
user@host:~$ sudo su
root@host:/home/user#
sudo -s
$SHELL
변수를 읽고 내용을 실행합니다. $SHELL
포함된 경우 /bin/bash
가 호출됩니다 sudo /bin/bash
. 즉, /bin/bash
비로그인 셸로 시작되므로 도트 파일이 실행되지 않지만 bash
자체적으로 읽혀집니다. bashrc
사용자에게 전화를 겁니다. 귀하의 환경은 변경되지 않습니다. 귀하의 집은 루트의 집이 아닙니다. 따라서 당신은 루트이지만 호출 사용자의 컨텍스트에 있습니다.
결론적으로
플래그 가 다음에 -i
추가되었습니다 .sudo
2004년sudo su -
는 템플릿 sudo su -
과 유사한 기능을 제공하며 템플릿 sudo -i
과 동일하게 작동하도록 되어 있습니다. 환경이 중요하지 않다면 어떤 것을 사용하는지는 중요하지 않다고 생각합니다.
다음에 추가
여기서 반드시 언급해야 할 기본 사항은 sudo
실행 전용으로 설계되었다는 것입니다.명령더 높은 권한을 갖고 해당 권한을 다시 원래 권한으로 낮추십시오. 그건 결코 현실이 될 의도가 아니었어변화사용자를 선택하고 루트 쉘을 열어 두십시오. 이 메커니즘은 시간이 지남에 따라 확장되었습니다. sudo
왜 모든 명령 앞에 이 메커니즘이 사용되는지에 대해 사람들이 짜증을 냈기 때문입니다.sudo
그래서 그 단어의 의미가 sudo
잘못 사용되었습니다. sudo
사용자가 루트 권한 사용을 최소화하도록 권장하도록 설계되었습니다.
우리가 지금 가지고 있는 것은 sudo
점점 더 대중화되고 있습니다. 거의 모든 잘 알려진 Linux 배포판에 통합되어 있습니다. 다른 사용자 계정으로 전환하기 위한 원래 도구는 입니다 su
. 오래된 *nix 베테랑에게는 그런 것이 sudo
불필요해 보일 수도 있습니다. 이는 복잡성을 더하고 Microsoft 운영 체제 제품군에서 알고 있는 메커니즘과 더 유사하게 작동하므로 *nix 시스템의 단순성에 대한 아이디어에 어긋납니다.
sudo
저는 베테랑은 아니지만, 소개된 이후로 제 옆구리에 가시가 되었던 것 같고 , sudo
가능하다면 사용법을 항상 우회하고 있습니다. 나는 적어도 그것을 사용하고 싶습니다 sudo
. 내 모든 시스템에서 루트 계정이 활성화되어 있습니다. 그러나 상황은 변하며 언젠가는 더 이상 su
사용되지 않고 sudo
완전히 대체될 수도 있습니다.su
그래서 , 와 같은 오래된 도구에 의존하기보다는 sudo
내부 메커니즘( -s
, )을 사용하는 것이 더 좋다고 생각합니다 .-i
su
답변2
귀하의 질문에 직접적으로 대답하려면: 아니요, 그렇게 할 이유가 없습니다. 또한 sudo su는 하나의 로그 항목으로 충분할 때 두 개의 로그 항목을 생성합니다.
나는 많은 사람들이 이 작업을 수행하는 것을 보았고 왜 그냥 실행하지 않는지 물었을 때 sudo -s
대답은 그들이 sudo에 대한 플래그를 모르고 -s
일반적으로 내가 지적한 후에 전환한다는 것입니다.
그러나 귀하의 sudo -s
및 목록 에 의 대안인 sudo -i
옵션을 하나 더 추가하고 싶습니다 . 홈 디렉터리를 포함한 환경을 보존하세요. 홈 디렉토리가 안전하지 않은 경우(NFS에서) 이는 위험합니다. 하지만 많은 사람들이 루트를 사용하는 환경에서는 루트 파일의 내용에 동의하지 않아도 됩니다 . 광산에는 루트의 전문화가 많이 포함되어 있으므로 루트와 정확히 동일한 환경을 얻지는 못하지만 적어도 내가 원하는 환경은 얻습니다.sudo -sE
su -m
sudo -sE
.bashrc
.bashrc