su 대 sudo -s 대 sudo -i 대 sudo bash

su 대 sudo -s 대 sudo -i 대 sudo bash

다음 명령의 차이점은 무엇입니까?

su
sudo -s
sudo -i
sudo bash

su루트 비밀번호를 알아야 하고 파일 sudo에 있어야 한다는 것을 알고 있지만 sudoers일단 실행되면 차이점은 무엇입니까?

내 홈 디렉토리는 내가 실행한 이후 이기 때문에 su와 사이에 차이가 있다는 것을 알고 있지만 내 홈 디렉토리는 여전히 이후 입니다 . 그러나 나는 이것이 내가 놓친 근본적인 차이점의 증상일 뿐이라고 생각합니다.sudo -s/rootsu/home/mynamesudo -s

답변1

su너와 함께~이 되다다른 사용자 - 기본적으로 루트이지만 잠재적으로 다른 사용자입니다. 라고 말하면 su -귀하의 환경도 해당 사용자의 로그인 환경으로 대체되므로 표시되는 내용은 해당 사용자로 로그인한 것과 구별할 수 없습니다. su다른 사용자가 로그인할 때 해당 사용자가 수행한 작업을 통해 해당 사용자가 수행한 작업을 시스템에서 알 수 있는 방법은 없습니다 .

상황은 다음과 같이 매우 다릅니다 sudo.

  • 실행하는 명령sudo 실행하다대상 사용자(기본적으로 루트이지만 변경할 수 있음)로 실행 -u하지만 이를 통해 실행하는 명령을 기록하고 사용자 이름으로 태그를 지정하여 나중에 비난을 할당할 수 있습니다. :)

  • sudo매우 유연합니다. 예를 들어 특정 사용자 또는 사용자 그룹이 실행할 수 있는 명령을 제한할 수 있습니다. 를 사용하면 su전부 아니면 전무입니다.

    이 기능은 일반적으로 역할을 정의하는 데 사용됩니다. 예를 들어 dump및 실행이 허용된 "백업" 그룹을 정의할 수 있습니다. tar각 그룹에는 시스템 디스크를 올바르게 백업하기 위해 루트 액세스가 필요합니다.

    여기서 이것을 언급하는 이유는 누군가에게 능력 이나 능력을 sudo부여하지 않고도 특권을 부여할 수 있다는 의미이기 때문입니다 . 그들은 업무를 수행하는 데 필요한 권한만 갖고 있는 반면 전체 시스템을 실행합니다. 하지만 이 점에 주의해야 합니다. 예를 들어 누군가에게 이라고 말할 수 있는 능력을 부여하면 그 사람은 에서 벗어나 사실상 와 동일한 힘을 가질 수 있습니다 .sudo -ssudo bashsusudo vivisudo -s

  • 루트 비밀번호 대신 sudoer의 비밀번호를 사용하기 때문에 sudo여러 sudoer 간의 권한을 격리합니다.

    su이는 루트 비밀번호가 변경되면 이를 알아야 하는 모든 사람에게 su알려야 한다는 관리 문제를 해결합니다 . sudosudoer의 비밀번호를 독립적으로 변경할 수 있습니다. 실제로 시스템의 루트 사용자 계정을 비밀번호로 잠그면 sudo모든 시스템 관리 작업이 sudo. 신뢰할 수 있는 sudoer가 많은 대규모 조직에서 이는 시스템 관리자 중 한 명이 떠날 때 루트 암호를 변경하고 남아 있는 관리자에게 배포할 필요가 없음을 의미합니다.

sudo bash와 의 주요 차이점은 다음 과 sudo -s같습니다.

  1. -s보다 짧다bash

  2. 기본 쉘에서 슈퍼유저 권한으로 sudo -s some-command실행하도록 할 수 있습니다 . some-command기본적으로 의 약어입니다 sudo $SHELL -c some-command.

  3. 대신 명령을 셸의 표준 입력(예 sudo -s < my-shell-script: . 당신은 이것을 사용할 수 있습니다heredoc여러 명령을 단일 호출로 보내 반복적으로 sudo입력할 필요가 없습니다 sudo.

  4. 이러한 추가 명령 인수가 없더라도 는 환경 변수 에서 먼저 찾은 다음 설정되지 않은 경우 일반적으로 사용자의 로그인 셸 설정에서 확인하기 때문에 와 다른 셸을 실행할 수 있다는 점에서 sudo -s여전히 다릅니다 .sudo bashbashSHELL/etc/passwd

에서 실행하는 셸은 sudo -s현재 사용자 환경을 상속합니다. 실제로 원하는 것이 로그인 직후와 같은 깔끔한 환경이라면 대신 원하는 것은 sudo -i에 비교적 최근에 추가된 것 입니다 sudo. 대략적 sudo -i으로 말하자면, 이는 몇 가지 주요 환경 변수 를 sudo -s제외한 모든 변수를 재설정하고 사용자의 홈 디렉터리로 다시 보냅니다. 표준 입력 또는 를 통해 해당 셸에서 실행하라는 명령도 제공하지 않으면 해당 셸을 대화형 로그인 셸로 실행하므로 사용자의 셸 시작 스크립트(예: )가 다시 실행됩니다.su -susudo -i some-command.bash_profile

이 모든 sudo -i것이 sudo -s. 왜? 왜냐하면 누군가가 이전에 환경을 수정할 수 있다면 sudo -s의도하지 않은 명령이 실행될 수 있기 때문입니다. 가장 확실한 경우는 수정이지만 , while under 라고 말하는 경우 SHELL와 같이 덜 직접적으로 발생할 수도 있습니다 .PAGERman foosudo -s

당신은 "만약 을 수정할 수 있다면 PAGER을 수정할 수 있고 PATH, 그런 다음 사악한 프로그램을 대체할 수 있습니다 sudo"라고 말할 수도 있지만 편집증이 심한 사람은 /usr/bin/sudo /bin/bash그 함정을 피하라고 말할 수 있습니다. 당신은 아마도 모든 상황에서 함정을 피할 만큼 편집증이 크지는 않을 것입니다.다른하지만 취약한 환경 변수. EDITOR예를 들어, 다음을 실행하기 전에 확인하는 것도 기억하셨나요?VCS명령? 따라서 sudo -i.

sudo -i작업 디렉터리도 사용자의 홈 디렉터리로 변경되므로 실행 시에 있었던 것과 동일한 디렉터리에 남아 있기를 원하는 상황에서는 계속 사용하고 싶을 수 sudo -s있습니다 . 그래도 원래 있던 곳으로 돌아가는 것이 여전히 더 안전합니다 .cdsudosudo -icd

때때로 볼 수 있는 이 모든 것의 또 다른 변형은 이며 sudo su, 이는 와 대략 동일합니다 sudo -s. 마찬가지로 sudo su -기능적으로도 와 매우 유사합니다 sudo -i. sudo와 는 경쟁하는 명령이기 때문에 su이렇게 짝을 이루는 것이 조금 이상하므로 sudo대신 플래그를 사용하는 것이 좋습니다.

답변2

에서우분투 포럼 포스트나는 얼마 전에 만들었습니다:

다음 실험을 고려해보세요.

applic@ion:~% sudo su
[sudo] password for applic:
root@ion:/home/applic# env > /tmp/sudo_su_env
root@ion:/home/applic# exit
exit
applic@ion:~% sudo -s
applic .bashrc read...
root@ion:~% env >/tmp/sudo_s

내가 찾은 차이점은 다음과 같습니다.

와 함께 sudo -s:

HOME=/home/applic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
reads $USER's ~/.bashrc

와 함께 sudo su:

HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
reads /etc/environment
reads /root/.bashrc

의 차이점을 확인하세요 $HOME. 루트이고 $HOME일반 사용자의 집으로 설정하면 문제가 발생할 수 있습니다. 예를 들어 그래픽 앱을 실행하는 경우 일반 사용자는 ~/.Xauthority루트로 덮어쓸 수 있습니다. 이로 인해 나중에 cron을 통해 특정 그래픽 앱을 실행할 수 없는 등 일반적인 사용자 문제가 발생합니다.

요약:

                                     corrupted by user's 
        HOME=/root  uses root's PATH     env vars
sudo -i     Y       Y[2]                 N
sudo -s     N       Y[2]                 Y
sudo bash   N       Y[2]                 Y
sudo su     Y       N[1]                 Y
  1. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 아마 의해 설정/etc/environment
  2. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

결론은 sudo -i사용자 환경에 오염되지 않은 루트 셸을 원할 때 실행하는 적절한 명령입니다.

답변3

su(에스마녀서버 또는에스대체ser)을 사용하면 사용자를 전환할 수 있습니다. su기본적으로 의도된 사용자의 권한으로 다른 쉘 인스턴스를 시작합니다. 기본적으로 사용자를 root사용자로 전환합니다. 특정 사용자를 전환하려면 다음과 같이 사용자를 전달해야 합니다.

$ su bob  # switches to bob (requires bob's password)

su -환경 변수가 루트로 재설정된다는 의미이며 su환경 변수가 이전 사용자임을 의미합니다.

예를 들어, 를 사용하는 경우 루트의 홈 디렉토리, 를 su -사용하는 경우 이전 사용자 홈 디렉토리입니다 su.

sudo (에스세르하다)는 사용자가 다른 사용자(기본적으로 슈퍼유저, 즉 )의 보안 권한으로 프로그램을 실행할 수 있도록 하는 명령줄 유틸리티입니다 root. /etc/sudoers특정 작업에 대한 권한이 있는 사용자를 나열하는 구성 파일을 사용합니다.

sudo는 다음과 같이 읽어야 합니다./ˈsuːduː/. sudo command즉 구문에스마녀서버와하다이 명령.

  • susudo -i루트 계정에 대한 로그인 과 동일하며 시뮬레이션합니다. 작업 디렉토리는 이며 /root루트 등을 읽습니다. .profile프롬프트가 $에서 #으로 변경되어 루트 액세스 권한이 있음을 나타냅니다.

  • sudo -s 쉘을 루트로 시작하지만 작업 디렉토리는 변경하지 않습니다.

  • sudo bashbash로 실행할 명령은 어디에 있습니까 sudo? 이 명령은 bash슈퍼유저로 실행됩니다.

  • 사용하면 sudo누군가가 하는 모든 일이 기록될 수 있습니다.
  • 를 사용하면 sudo사용자가 루트 비밀번호를 알 필요가 없습니다.
  • 이를 사용하면 sudo실행이 허용되는 명령을 제한할 수 있습니다.

관련 정보