루트를 수십 번 연속 입력 해야하는 작업을 수행 할 때 세션을 루트 세션으로 전환하는 것을 선호합니다. 인터넷에서 사용한 다양한 자습서와 지침 sudo su
에서 sudo su -
, sudo -i
및 sudo /bin/bash
루트 세션을 여는 데 사용되는 것을 볼 수 있지만 이러한 차이점과 언제 또는 그 차이가 중요한지 명확하지 않습니다.
누군가 나를 위해 이것을 정리할 수 있습니까?
답변
이를 설명하려면 프로그램이 무엇을하는지 알아야합니다.
su
-이 명령은su
다른 사용자 (로 전환하는 데 사용되는 S의 마녀 U의 SER),하지만 당신은 어떤 매개 변수를 사용하여 명령을 호출하여 루트 사용자로 전환 할 수 있습니다.su
사용자 환경으로 전환 한 비밀번호를 입력 한 후 전환 할 사용자의 비밀번호를 묻습니다.sudo
–sudo
루트 권한으로 단일 명령을 실행하기위한 것입니다. 그러나su
현재 사용자의 비밀번호를 묻는 메시지 와 달리 . 이 사용자는 sudoers 파일 (또는 sudoers 파일에있는 그룹)에 있어야합니다. 기본적으로 Ubuntu는 암호를 15 분 동안 “기억”하므로 매번 암호를 입력 할 필요가 없습니다.bash
-컴퓨터와 상호 작용하는 텍스트 인터페이스 로그인, 비 로그인, 대화식 및 비 대화식 쉘의 차이점을 이해하는 것이 중요합니다.
포탄의 종류 :
- 로그인 쉘 : 로그인 쉘은 지정된 사용자로 시스템에 로그인합니다. 사용자 이름과 비밀번호가 필요합니다. 가상 터미널에 로그인하기 위해 ctrl+ alt+ F1를 누르면 로그인 쉘에 로그인 한 후 얻을 수 있습니다.
- non-login shell : 로그인 하지 않은 상태에서 실행되며 현재 로그인 한 사용자입니다. 그놈에서 그래픽 터미널을 열면 비 로그인 쉘입니다.
- 대화식 쉘 : 대화식으로 명령을 입력하거나 중단 할 수있는 쉘 (로그인 또는 비 로그인). 예를 들어 그놈 터미널.
- 비 대화식 쉘 : 자동화 된 프로세스에서 실행되는 (서브) 쉘. 입력이나 출력이 보이지 않습니다.
따라서 사례는 다음과 같습니다.
-
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'
답변
차이점을 찾기 위해 다른 호출간에 결과 환경을 혼란시킬 수 있습니다.
몇 가지 중요한 변수에서 “작은” 차이점을 찾을 수 있습니다 .
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)