다음 명령의 차이점은 무엇입니까?
su
sudo -s
sudo -i
sudo bash
su
루트 비밀번호를 알아야 하고 파일 sudo
에 있어야 한다는 것을 알고 있지만 일단 실행되면 어떤 차이가 있습니까?sudoers
su
sudo -s
내 홈 디렉토리는 /root
내가 실행한 이후 이기 때문에 와 사이에 차이가 있다는 것을 알고 있지만 su
내 홈 디렉토리는 여전히 /home/myname
이후 입니다 sudo -s
. 그러나 나는 이것이 내가 간과하고 있는 근본적인 차이점의 증상일 뿐이라고 생각합니다.
답변1
su
너와 함께~이 되다다른 사용자 - 기본값은 루트이지만 다른 사용자일 수도 있습니다. 라고 말하면 su -
귀하의 환경도 해당 사용자의 로그인 환경으로 대체되므로 표시되는 내용은 해당 사용자로 로그인했을 때와 다르지 않습니다. 시스템은 다른 su
사용자가 로그인했을 때 수행한 작업을 기반으로 다른 사용자에게 수행 중인 작업을 결정할 수 없습니다.
상황은 매우 다릅니다 sudo
.
실행하는 명령
sudo
구현하다대상 사용자로(기본값은 루트이지만 변경 가능)-u
실행하는 명령을 기록하고 나중에 책임을 할당할 수 있도록 사용자 이름으로 태그를 지정합니다. :)sudo
매우 유연합니다. 예를 들어 특정 사용자 또는 사용자 그룹이 실행할 수 있는 명령을 제한할 수 있습니다. 그것으로su
그것은 전부 아니면 전무입니다.이 기능은 일반적으로 역할을 정의하는 데 사용됩니다. 예를 들어 실행이 허용되는
dump
"백업" 그룹을 정의할 수tar
있으며 각 그룹에는 시스템 디스크를 올바르게 백업하기 위해 루트 액세스 권한이 필요합니다.여기서 이것을 언급하는 이유는 누군가에게 능력 이나 능력을
sudo
부여하지 않고도 특권을 부여할 수 있다는 의미이기 때문입니다 . 그들은 업무를 수행하는 데 필요한 권한만 갖고 있지만 전체 시스템을 실행할 수 있습니다. 하지만 이 점에 주의해야 합니다. 예를 들어 누군가에게 말할 수 있는 권한을 주면 그 사람은 그 말을 무시 하고 와 같은 권한을 가질 수 있습니다 .sudo -s
sudo bash
su
sudo vi
vi
sudo -s
루트 비밀번호 대신 sudoer 비밀번호를 사용하기 때문에
sudo
여러 sudoer 간의 권한을 격리합니다.su
이는 루트 비밀번호가 변경되면su
이를 사용하기 위해 비밀번호를 알아야 하는 모든 사람에게 알려야 하는 관리 문제를 해결합니다 .sudo
sudoer의 비밀번호를 독립적으로 변경할 수 있도록 허용합니다. 실제로 시스템의 루트 사용자 계정을 비밀번호로 잠그면sudo
모든 시스템 관리 작업이 통과됩니다sudo
. 신뢰할 수 있는 sudoer가 많은 대규모 조직에서는 시스템 관리자 중 한 명이 떠날 때 루트 비밀번호를 변경하고 배포할 필요가 없습니다. 나머지 관리자에게 전달합니다.
sudo bash
와 의 주요 차이점은 다음과 sudo -s
같습니다.
-s
~보다 짧은bash
기본 쉘에서 실행
sudo -s some-command
하지만 슈퍼유저 권한으로 실행할 수 있습니다.some-command
기본적으로 의 약어입니다sudo $SHELL -c some-command
.명령을 쉘의 표준 입력에 전달할 수 있습니다
sudo -s < my-shell-script
. 예를 들어 와 함께 사용할 수 있습니다.트레독sudo
반복적인 입력을 피하기 위해 단일 호출에 여러 명령을 보냅니다sudo
.이러한 추가 명령 인수가 없어도 다른 쉘로 실행될 수 있기 때문에
sudo -s
여전히 다릅니다 . 먼저 환경 변수를 살펴본 다음 설정되지 않은 경우 사용자의 로그인 쉘 설정(보통 .sudo bash
bash
SHELL
/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
와 같이 덜 직접적으로 발생할 수도 있습니다 .PAGER
man foo
sudo -s
"수정할 수 있으면 PAGER
수정하고 PATH
사악한 sudo
프로그램을 대체할 수 있습니다."라고 말할 수도 있지만 편집증이 심한 사람은 /usr/bin/sudo /bin/bash
이 함정을 피해야 한다고 주장할 수 있습니다. 당신은 너무 편집증적이어서 모든 함정을 피할 수도 없습니다.다른그러나 환경 변수의 영향을 받기 쉽습니다. EDITOR
예를 들어, 명령을 실행하기 전에 확인하는 것을 기억했나요?VCS주문하다? 그러므로 sudo -i
.
sudo -i
작업 디렉토리도 사용자의 홈 디렉토리로 변경하기 때문에 실행하는 디렉토리와 동일한 디렉토리에 sudo -s
머물기를 원한다면 이 디렉토리를 계속 사용할 수 있습니다 . 그러나 원래 위치를 오가는 것이 여전히 더 안전합니다 .cd
sudo
sudo -i
cd
때때로 볼 수 있는 이 모든 것의 또 다른 변형 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
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
다음으로 인해 발생할 수 있습니다./etc/environment
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
은에스마녀너세르헤하다이 명령.
su
sudo -i
루트 계정 로그인 과 동일 하며 시뮬레이션합니다. 작업 디렉토리는/root
루트 디렉토리.profile
등을 읽습니다. 프롬프트가 $에서 #으로 변경되어 루트 액세스 권한이 있음을 나타냅니다.sudo -s
쉘을 루트로 시작하지만 작업 디렉토리는 변경하지 않습니다.sudo bash
bash
실행할 명령은 어디에 있습니까sudo
? 이 명령은bash
수퍼유저로 실행됩니다.- 누군가가 하는 모든 일을 기록하는 데 사용합니다
sudo
. - 사용하면
sudo
사용자가 루트 비밀번호를 알 필요가 없습니다. - 이를 사용하면
sudo
실행할 수 있는 명령을 제한할 수 있습니다.