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

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

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

su
sudo -s
sudo -i
sudo bash

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

susudo -s내 홈 디렉토리는 /root내가 실행한 이후 이기 때문에 와 사이에 차이가 있다는 것을 알고 있지만 su내 홈 디렉토리는 여전히 /home/myname이후 입니다 sudo -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. 예를 들어 와 함께 사용할 수 있습니다.트레독sudo반복적인 입력을 피하기 위해 단일 호출에 여러 명령을 보냅니다 sudo.

  4. 이러한 추가 명령 인수가 없어도 다른 쉘로 실행될 수 있기 때문에 sudo -s여전히 다릅니다 . 먼저 환경 변수를 살펴본 다음 설정되지 않은 경우 사용자의 로그인 쉘 설정(보통 .sudo bashbashSHELL/etc/passwd

실행 중인 셸은 sudo -s현재 사용자 환경을 상속합니다. 정말로 원하는 것이 로그인 후 얻는 것과 같은 깨끗한 환경이라면 원하는 것은 다음 과 sudo -i같습니다 sudo. 대략적으로 말하면 sudo -i이는 다음과 같습니다 sudo -s. su -su가지 주요 환경 변수를 제외한 모든 변수를 재설정하고 다시 이전 상태로 돌아갑니다. 사용자의 홈 디렉터리. 표준 입력 또는 명령을 통해 해당 셸에서 실행하라는 명령을 제공하지 않으면 sudo -i some-command해당 셸을 대화형 로그인 셸로 실행하므로 사용자의 셸 시작 스크립트(예: .bash_profile)가 다시 실행될 수 있습니다.

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

"수정할 수 있으면 PAGER수정하고 PATH사악한 sudo프로그램을 대체할 수 있습니다."라고 말할 수도 있지만 편집증이 심한 사람은 /usr/bin/sudo /bin/bash이 함정을 피해야 한다고 주장할 수 있습니다. 당신은 너무 편집증적이어서 모든 함정을 피할 수도 없습니다.다른그러나 환경 변수의 영향을 받기 쉽습니다. EDITOR예를 들어, 명령을 실행하기 전에 확인하는 것을 기억했나요?VCS주문하다? 그러므로 sudo -i.

sudo -i작업 디렉토리도 사용자의 홈 디렉토리로 변경하기 때문에 실행하는 디렉토리와 동일한 디렉토리에 sudo -s머물기를 원한다면 이 디렉토리를 계속 사용할 수 있습니다 . 그러나 원래 위치를 오가는 것이 여전히 더 안전합니다 .cdsudosudo -icd

때때로 볼 수 있는 이 모든 것의 또 다른 변형 sudo susudo -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 -.old를 사용하는 경우 사용자의 홈 디렉터리입니다 su.

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

sudo는 읽어야합니다/ˈsuːduː/. 문법 sudo command에스마녀세르헤하다이 명령.

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

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

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

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

관련 정보