sudo su를 실행해야 할 이유가 있습니까?


78

루트 계정이 비활성화 된 컴퓨터에서 루트 셸을 시작하려면 다음 중 하나를 실행할 수 있습니다.

  • 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 -i'와 'sudo su-'를 비교하는 meld의 스크린 샷

그리고 sudo -s(왼쪽)과 sudo su(오른쪽)을 비교하십시오 .

'sudo -s'와 'sudo su'를 비교하는 meld의 스크린 샷

SUDO_foo변수와를 무시한 주요 차이점 은 버전 LS_COLORSXDG_foo시스템 변수 인 것 같습니다 sudo su.

그 차이가 다소 우아하지 않은 것을 사용해야 할 경우가 sudo su있습니까? 달리는 데 아무런 문제가 sudo su없거나 무언가를 놓치고 있다고 사람들에게 (자주있는 것처럼) 안전하게 말할 수 있습니까 ?


8
나는 ubuntu사용자를 표준에서 사용하지 못하게 하는 멋진 시스템을 이해하지 못했습니다 su -. 그들은 문제를 만들어 냈고 이제는 그 문제를 해결하는 방법에 대한 끝없는 토론이 있습니다.
jimmij

16
@jimmij로 루트 암호를 알 필요가 su -없습니까? 여러 사용자가 루트 액세스 권한을 가져야하는 다중 사용자 환경에서 보안 허점이 있다고 생각하지 않습니까?
Erathiel

4
@Christopher 문제는 시스템을 해킹 할 수있는 sudo 권한이나 root 암호를 가진 사용자가 아닙니다. 문제는 비밀번호 안전에 관한 것입니다. 루트 암호를 변경할 때는 암호를 알아야하는 모든 사용자에게 알려야하므로 어려울 수 있습니다. sudo를 사용하면이 어려움이 없습니다.
Huygens

4
diff 도구 란 무엇입니까?
조쉬 더

5
@jimmij 우분투는 어떻게 사용하지 못하게 su -합니까? 예, 루트 암호를 설정해야하지만 사소한 것입니다.
Phizes

답변:


62

귀하의 질문에 언급했듯이 주요 차이점은 환경입니다.

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 susudo명령으로 호출 합니다 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플래그에 추가 sudo2004 유사한 기능을 제공하기 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.


4
아, 2004 년 이전에 실제로 실행해야 할 이유가 sudo su있었습니까? 당시 sudo와 활성 루트 계정없이 배포판을 사용하고 있었으므로 알 수 없습니다. 우분투 세계에서 sudo su meme의 보급을 설명 할 수 있습니다.
terdon

8
나는에 대해 알지도 못하는 sudo -isudo -s전에 - 나는 1991 년부터 다양한 종류의 유닉스의를 실행하고 나를 위해 봤는데 sudo su -이 시점에서 그냥 뿌리 깊은 습관이다.
솜털

2
그때 sudo -s와 같은 가요 sudo $SHELL?
Samuel Edwin Ward

3
(@chaos에 동의) 사용하는 이유 sudo su -는 1) 작동하고 정확히 무엇을 알고 있는지, 2) sudo(이미 알고있는 경우 su -) 3) 다른 옵션을 기억할 필요가 없기 때문입니다. sudo현재 작업중 인 버전을 기억하지 않아도됩니다 . 이미 가지고있는 것이 잘 작동 할 때 왜 퀴즈를 하나 더 기억 하는가? 아무것도 거기에 su -i로그 항목을 피보다 더 나은 다른 수행은? 나는 그것에 sudo su -대해 걱정할만큼 충분히 사용하지 않습니다 .
jrw32982

3
방금 업데이트를 보았습니다. 아주 좋습니다! 기록을 위해, 내가없는 시스템에서 * nix 이빨도 자르고 sudo매우 익숙 하다고 진술하겠습니다 su. 나를 괴롭히는 두 가지의 조합입니다.
terdon

16

귀하의 질문에 직접 대답하기 위해 : 아니오, 이럴만한 이유가 없습니다. 또한 sudo su는 하나만 있으면 두 개의 로그 항목을 생성합니다.

나는 많은 사람들이 이것을하는 것을 보았고, 왜 그들이 왜 실행하지 않는지 물었을 때 sudo -s대답은 단지 -ssudo 플래그를 알지 못하고 일반적으로 지적한 후에 전환합니다.

그러나 sudo -s및 의 목록 에을 (를) 대체하는 sudo -i옵션을 하나 더 추가하고 싶습니다 . 홈 디렉토리를 포함하여 환경을 보존합니다. 홈 디렉토리가 안전하지 않은 경우 (NFS에서) 위험이 있습니다. 그러나 많은 사람들이 루트를 사용하는 환경에서는 루트 파일 의 내용에 동의하지 않아도 됩니다. 내 루트에 대한 많은 전문화가 포함되어 있으므로 루트와 동일한 환경을 얻지 못하지만 적어도 내가 원하는 환경을 정확히 얻습니다.sudo -sEsu -msudo -sE.bashrc.bashrc


4
를 포함하여 환경을 보존하는 경우 $HOME홈 폴더 아래에 생성 된 모든 새 파일은 사용자가 아닌 루트가 소유합니다. 이로 인해 많은 권한 오류를 진단하기가 어려웠습니다.
Eris

sudo -sE다음 echo $HOME주는 /rootCentOS는 7, bash는 4.2. -sE언급 한대로 홈 디렉토리를 보존하지 않는 것 같습니다.
jeremysprofile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.