함께 su
사용하면 될 다른 사용자 - 기본적으로 루트하지만 잠재적으로 다른 사용자. 이라고 말하면 su -
환경이 해당 사용자의 로그인 환경으로 바뀌므로 사용자가 로그인하는 것과 구별 할 수 없습니다. su
로그인 할 때 해당 사용자의 조치에서 다른 사용자에게 수행 한 작업을 시스템이 알 수있는 방법이 없습니다 .
상황은 다음과 매우 다릅니다 sudo
.
실행하는 명령 은 기본적으로 루트 사용자이지만 대상 사용자로 sudo
실행 되지만 변경할 수는 -u
있지만 실행 한 명령은 사용자 이름으로 태그 지정되어 나중에 비난을 할당 할 수 있습니다. :)
sudo
매우 유연합니다. 예를 들어 지정된 사용자 또는 사용자 그룹이 실행할 수있는 명령을 제한 할 수 있습니다. 로 su
, 그것은 전부 또는 아무것도 아닙니다.
이 기능은 일반적으로 역할을 정의하는 데 사용됩니다. 예를 들어, 실행이 허용 된 "백업"그룹 dump
과 tar
시스템 디스크를 올바르게 백업하려면 각각 루트 액세스가 필요한 그룹을 정의 할 수 있습니다.
나는 이것을 당신이 sudo
그들에게 sudo -s
또는 sudo bash
능력 을주지 않고 누군가에게 특권을 줄 수 있다는 것을 의미하기 때문에 이것을 언급 합니다. su
전체 시스템을 실행 하면서 작업을 수행하는 데 필요한 권한 만 있습니다. sudo vi
예를 들어, 누군가에게 말할 수있는 능력을 주면 , 그들은 밖으로 나와 vi
효과적으로 같은 힘을 가질 수 있습니다 sudo -s
.
루트 암호 대신 sudoer의 암호를 sudo
사용하므로 여러 sudoers간에 권한을 분리합니다.
이것은 su
루트 암호가 변경 될 때, 그것을 사용해야하는 모든 사람들에게 알려야한다는 관리 문제를 해결합니다 su
. sudo
sudoers의 비밀번호를 독립적으로 변경할 수 있습니다. 실제로 시스템에서 루트 사용자의 계정을 암호로 잠그면 sudo
모든 sysadmin 작업이를 통해 수행됩니다 sudo
. 신뢰할 수있는 sudoers가 많은 대규모 조직에서 이는 sysadmins 중 하나가 떠날 때 루트 암호를 변경하여 남아있는 관리자에게 배포 할 필요가 없음을 의미합니다.
주요 차이점 sudo bash
및 sudo -s
즉 -s
짧은 당신은 몇 가지 방법으로 사용자의 기본 쉘에서 실행하는 명령을 전달할 수 있습니다 :
쉘에서 sudo -s some-command
어떤 것을 실행할 수 있는지 말할 수 있습니다 some-command
. 기본적으로 약어입니다 sudo $SHELL -c some-command
.
대신 명령을 셸의 표준 입력으로 전달할 수 있습니다 sudo -s < my-shell-script
. 이것을 반복해서 입력 할 필요없이 heredoc 과 함께 사용 하여 단일 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
수 있으면 의도하지 않은 명령이 실행될 수 있습니다. 가장 명백한 경우는 수정 SHELL
이지만 아래에있는 PAGER
경우 via와 같이 직접적으로 덜 발생할 수 있습니다 .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 -
이 방법 을 사용하는 것이 좋습니다. 이 방법으로 루트 암호가 필요하지 않으며-
홈 디렉토리가 올바르게 설정되어 있는지 확인하십시오.