루트 계정이 비활성화 된 컴퓨터에서 루트 셸을 시작하려면 다음 중 하나를 실행할 수 있습니다.
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
없거나 무언가를 놓치고 있다고 사람들에게 (자주있는 것처럼) 안전하게 말할 수 있습니까 ?
답변
귀하의 질문에 언급했듯이 주요 차이점은 환경입니다.
sudo su -
vs. sudo -i
의 경우 sudo su -
그것이 로그인 쉘, 그래서 /etc/profile
, .profile
그리고 .bashrc
실행하면 루트의 환경과 루트의 홈 디렉토리에있는 자신을 발견 할 것이다.
sudo -i
거의 동일 (초기 로그인을 시뮬레이션) 옵션은 로그인 쉘과 같은 대상 사용자의 암호 데이터베이스 항목에 의해 지정된 쉘을 실행합니다. 이 로그인 특정 자원과 같은 파일을 의미 , 또는 읽고 쉘에 의해 실행됩니다.sudo su -
-i
.profile
.bashrc
.login
sudo su
vs. 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
점점 더 대중화되고 있습니다. 그것은 거의 모든 잘 알려진 리눅스 배포판에 통합되어 있습니다. 다른 사용자 계정으로 전환하는 원래 도구는 su
입니다. 오래된 학교 * nix 베테랑의 경우와 같은 것이 sudo
불필요하게 보일 수 있습니다. 복잡성을 추가하고 Microsoft의 os 제품군에서 알고있는 메커니즘에 더 적합하게 작동하므로 * nix 시스템의 단순성에 위배됩니다.
나는 정말 베테랑이 아니지만 내 의견으로 sudo
는 항상 내 편에 가시가있었습니다. 시간이 소개되고 sudo
가능한 경우 항상 사용법을 사용했습니다 . 나는 사용하기를 가장 꺼려한다 sudo
. 모든 시스템에서 루트 계정이 활성화되어 있습니다. 그러나 su
더 이상 사용되지 않고 완전히 sudo
대체 되는시기가 올 것 su
입니다.
따라서 나는 같은 오래된 도구에 의존하는 대신에 sudo
내부 메커니즘 ( -s
, -i
) 을 사용하는 것이 최선이라고 생각합니다 su
.
답변
귀하의 질문에 직접 대답하기 위해 : 아니오, 이럴만한 이유가 없습니다. 또한 sudo su는 하나만 있으면 두 개의 로그 항목을 생성합니다.
나는 많은 사람들이 이것을하는 것을 보았고, 왜 그들이 왜 실행하지 않는지 물었을 때 sudo -s
대답은 단지 -s
sudo 플래그를 알지 못하고 일반적으로 지적한 후에 전환합니다.
그러나 sudo -s
및 의 목록 에을 (를) 대체하는 sudo -i
옵션을 하나 더 추가하고 싶습니다 . 홈 디렉토리를 포함하여 환경을 보존합니다. 홈 디렉토리가 안전하지 않은 경우 (NFS에서) 위험이 있습니다. 그러나 많은 사람들이 루트를 사용하는 환경에서는 루트 파일 의 내용에 동의하지 않아도 됩니다. 내 루트에 대한 많은 전문화가 포함되어 있으므로 루트와 동일한 환경을 얻지 못하지만 적어도 내가 원하는 환경을 정확히 얻습니다.sudo -sE
su -m
sudo -sE
.bashrc
.bashrc