루트를 수십 번 연속 입력 해야하는 작업을 수행 할 때 세션을 루트 세션으로 전환하는 것을 선호합니다. 인터넷에서 사용한 다양한 자습서와 지침 sudo su
에서 sudo su -
, sudo -i
및 sudo /bin/bash
루트 세션을 여는 데 사용되는 것을 볼 수 있지만 이러한 차이점과 언제 또는 그 차이가 중요한지 명확하지 않습니다.
누군가 나를 위해 이것을 정리할 수 있습니까?
루트를 수십 번 연속 입력 해야하는 작업을 수행 할 때 세션을 루트 세션으로 전환하는 것을 선호합니다. 인터넷에서 사용한 다양한 자습서와 지침 sudo su
에서 sudo su -
, sudo -i
및 sudo /bin/bash
루트 세션을 여는 데 사용되는 것을 볼 수 있지만 이러한 차이점과 언제 또는 그 차이가 중요한지 명확하지 않습니다.
누군가 나를 위해 이것을 정리할 수 있습니까?
답변:
이를 설명하려면 프로그램이 무엇을하는지 알아야합니다.
su
-이 명령은 su
다른 사용자 (로 전환하는 데 사용되는 S의 마녀 U의 SER),하지만 당신은 어떤 매개 변수를 사용하여 명령을 호출하여 루트 사용자로 전환 할 수 있습니다. su
사용자 환경으로 전환 한 비밀번호를 입력 한 후 전환 할 사용자의 비밀번호를 묻습니다. sudo
- sudo
루트 권한으로 단일 명령을 실행하기위한 것입니다. 그러나 su
현재 사용자의 비밀번호를 묻는 메시지 와 달리 . 이 사용자는 sudoers 파일 (또는 sudoers 파일에있는 그룹)에 있어야합니다. 기본적으로 Ubuntu는 암호를 15 분 동안 "기억"하므로 매번 암호를 입력 할 필요가 없습니다.bash
-컴퓨터와 상호 작용하는 텍스트 인터페이스 로그인, 비 로그인, 대화식 및 비 대화식 쉘의 차이점을 이해하는 것이 중요합니다.포탄의 종류 :
따라서 사례는 다음과 같습니다.
sudo su
sudo
명령으로 호출 합니다 su
. Bash는 대화 형 비 로그인 셸이라고합니다. bash는 오직 실행 만한다 .bashrc
. 루트로 전환 한 후에도 여전히 같은 디렉토리에 있음을 알 수 있습니다.
user@host:~$ sudo su
root@host:/home/user#
sudo su -
이 시간은 로그인 쉘, 그래서 /etc/profile
, .profile
그리고 .bashrc
실행하면 루트의 환경과 루트의 홈 디렉토리에있는 자신을 발견 할 것이다.
sudo -i
sudo su -
-i (초기 로그인 시뮬레이션) 옵션은 대상 사용자의 비밀번호 데이터베이스 항목에 의해 지정된 쉘을 로그인 쉘로 실행 하는 것과 거의 동일 합니다. 이 로그인 특정 자원과 같은 파일을 의미 .profile
, .bashrc
또는 .login
읽고 쉘에 의해 실행됩니다.
sudo /bin/bash
이것은 당신 sudo
이 명령으로 호출한다는 것을 의미합니다 /bin/bash
. /bin/bash
비 로그인 쉘로 시작되어 모든 도트 파일이 실행되지는 않지만 bash 자체 .bashrc
는 호출하는 사용자를 읽습니다 . 환경은 동일하게 유지됩니다. 당신의 집은 뿌리의 집이 아닙니다. 그래서 당신은 근본이지만 호출하는 사용자의 환경에 있습니다.
sudo -s
$SHELL
변수를 읽고 내용을 실행합니다. 경우 $SHELL
포함 /bin/bash
이 호출 sudo /bin/bash
(위 참조).
검사:
로그인 쉘에 있는지 여부를 확인하려면 ( shopt
내장 명령 이므로 bash에서만 작동 ) :
shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
sudo
허용 된 사용자가 수퍼 유저 또는 다른 사용자 로 명령을 실행할 수 있습니다 . 어쨌든 노력에 +1하십시오.
root
사용자 세션 을 여는 데 가장 일반적으로 사용되는 것을 발견합니다 (vs 사용 sudo
)는 root
새로운 것을 설치하거나 주요 재구성을 수행 할 때와 같이 권한을 많이 사용해야하는 일을하는 경우입니다 . 나는을 사용 sudo /bin/bash
했지만 분명히 이해할 수없는 이유로 그 방법에 나쁜 랩이 있습니다.
sudo -i
제안합니다. 여기를 읽으십시오 : ubuntuforums.org/showthread.php?t=1817402 그리고 여기 : unix.stackexchange.com/questions/98531/…
차이점을 찾기 위해 다른 호출간에 결과 환경을 혼란시킬 수 있습니다.
몇 가지 중요한 변수에서 "작은" 차이점을 찾을 수 있습니다 .
PATH
, LD_LIBRARY_PATH
,LD_PRELOAD
또는 ~ /의 약간의 차이. 도트 파일 처리 ( ~/.config
).
명령이 생성하는 $ HOME 기반 로그 파일 ( ~/.xsession.errors
, 등 ...) 또는 xauth 쿠키 ( ~/.Xauthority
) 의 소유권도 고려하십시오 .
다음 명령을 시도하십시오 :
# 'su -' vs 'su'
diff <(sudo su - -c env | sort) <(sudo su -c env | sort)
# 'su -' vs 'sudo -i'
diff <(sudo su - -c env | sort) <(sudo -i env | sort)
sudo -s
하고sudo su
.