Sudo 대 루트; 실제 차이점이 있습니까?


43

저는 제품의 지원 멤버와 함께 일하고 있으며 일련의 패치를 설치하려면 루트가되어야하며 sudo는 작동하지 않습니다. 그는 이유를 제시하지는 않지만 그의 믿음에는 매우 확고 해 보인다. 수퍼 유저 브라우징이 경우에 대한 가능한 이유를 확인할 수 없으며 확인시 다음을 실행합니다.

sudo -l

나는 얻다:

...
User [MY USERNAME] may run the following commands on this host:
    (ALL) ALL

리눅스 / 서버 팀으로부터 실제로 루트로 접근하는 것은 내가 아는 바와 같이 즉각적인 프로세스가 아니므로 직접 설치하는 것을 선호합니다.

서버에 소프트웨어를 설치할 때 sudo가 root와 다르게 동작하는 실제적인 이유가 있습니까?


2
나는 당신이 그에게 다시 던져야한다고 생각합니다. 다른 사람들이 보여 주듯이, sudo를 사용하여 뿌리를 내릴 수있는 무수한 방법이 있으며, sudo가 왜 부족한 지에 대한 구체적인 이유를 제시 할 수 없다면, 그는 다리가 없습니다.
Garrett

1
환경과 하위 명령이 떠 오릅니다. 나는 Hastur가 환경에서 잘 해냈고 Jayen은 하위 명령, 파이프 및 리디렉션으로 끈적 끈적한 일을했다고 생각합니다.
jww

2
개럿은 좋은 점을 가지고 있지만 잠재적 인 오줌 싸기 대회에 들어가기 전에 지원 멤버에게 물어볼 것입니다. 두 가지 방법 모두 시도해 보았습니까? sudo스크립트가 현재 작성된대로 실패한 스크립트와 스크립트를 사용했을 수 있습니다. 이 경우 sds의 답변이 가장 도움이 될 것 sudo su -입니다.
jww

답변:


33

sudo또는로 프로그램을 호출하는 방법에 따라 크게 달라집니다 su.
예를 들어 지금이 순간의 시스템에서 :

                  .bashrc                        
    COMMAND        $HOME   $USER  Env.  $PATH
 1. sudo -i        (root)   root  root  [1]
 2. sudo -s        (USER)   root  USER  /home/${USER}/bin:[1]
 3. sudo /bin/bash (USER)   root  USER  /home/${USER}/bin:[1]  
 4. sudo su        (root)   root  USER  [1]:/usr/games:/usr/local/games  
 5. sudo su -      (root)   root  root  [1] 

여기서 [1] = / usr / local / sbin : / usr / local / bin : / usr / sbin : / usr / bin : / sbin : / bin
Env = 환경 변수는 $ USER에서 $ 1에서 가져온 1과 5로 재설정됩니다. 2,3,4.

따라서 스크립트 또는 다른 옵션으로 시작된 프로그램은 다른 $PATH, $HOME쉘은 다른 .bashrc, .profile환경 변수를 읽을 수 있습니다 . 와 관련된 파일을 읽습니다 $HOME. 각 사용자는 다른 방식 (변수 $PATH,, .bashrc, .profile, .bash_profile, alias ...) 으로 환경을 수정할 수 있습니다 . 특히, 사용자는 그의 디렉토리에서 다른 순서의 디렉토리를 가질 수 있으며, $PATH결과적으로 스크립트는 예를 들어 /home/$USER/bin루트에서 예상되는 경로 의 명령 대신에 명령을 실행할 수 있습니다 .

당신은 아래의 프로그램을 실행할 수 있습니다 sudo -i당신이 루트로 기록 된대로 su -,하지만 당신은 그것을 실행하는 경우에는 다른 동작을 할 수 있습니다 sudo MyCommand또는 함께 su -c MyCommand.


보낸 사람 man su:

설명 부분에서 :
현재 환경이 새 쉘로 전달됩니다 . $ PATH 값은 일반 사용자의 경우 / bin : / usr / bin으로 재설정 되거나 수퍼 유저의 경우 / sbin : / bin : / usr / sbin : / usr / bin 으로 재설정 됩니다
...
옵션 부분 :
- , -l , --login 사용자가 직접 로그인 했을 것으로 예상
되는 환경과 유사한 환경을 제공합니다 .

남자에서 sudo

-i , --login
대상 사용자의 비밀번호 데이터베이스 항목으로 지정된 쉘을 로그인 쉘로 실행합니다. 이는 .profile 또는 .login과 같은 로그인 특정 자원 파일을 쉘에서 읽음을 의미합니다. 명령이 지정되면 쉘의 -c 옵션을 통해 실행되도록 쉘로 전달됩니다. 명령을 지정하지 않으면 대화식 쉘이 실행됩니다. sudo쉘을 실행하기 전에 해당 사용자의 홈 디렉토리로 변경을 시도합니다. 명령은 사용자가 로그인 할 때와 유사한 환경에서 실행됩니다 . sudoers (5) 매뉴얼의 명령 환경 섹션에는 -i 옵션이 sudoers 정책이 사용 중일 때 명령이 실행되는 환경에 어떤 영향을 미치는지 설명되어 있습니다.


좋은 대답입니다. 저는 여전히 리눅스 초보자입니다.하지만 sudosudoers 파일의 권한에 따라 사용 가능한 작업이 제한 될 수 있다는 것과 루트에 대한 제한이없는 작업을 수행하는 것의 또 다른 차이점은 무엇 입니까? 마지막 블록 인용문은 암시 할 수 있지만, 올바르게 이해하면 환경 (또는 환경 때문에)을 넘어 또 다른 실질적인 차이처럼 보입니다.
fixer1234

23

당신이 가득 차있는 경우 sudo액세스, 당신이 될 수 있습니다 root사용하여 sudo su -보안 점은 이론에 불과하므로,.

사실,이 프로그램으로 실행 사이의 차이를 분별하는 방법 root과 프로그램에 따라 실행 sudo사용 - getuid대는 geteuid- 그러나 이것은 인위적인 트릭이다. 왜 패치 시스템이 그렇게할까요?


5
에 대해 말하면 su -, 그는 sudo -i직접 로그인 할 때와 동일한 환경을 갖도록 사용할 수 있습니다.
Cristian Ciupitu

2
sudo myscript를 들어 실행할 경우 $ PATH 및 환경 변수를 현재 쉘에서 유지합니다. 로 실행 sudo -i myscript하면 루트로 로그인하는 것처럼 실행됩니다. _zoo of calls :-) _
Hastur

1
sudo루트로 로그인 할 때 환경 변수가 동일하게 설정되지 않을 수 있다고 지적하는 것이 중요하다고 생각합니다.
secretform

1
@dmanexe : sudo는 수퍼 유저 수행을 의미하지 않으며 "사용자 전환"입니다. su 및 sudo는 수퍼 유저가 아닌 모든 사용자로 전환하는 데 사용할 수 있습니다. 또한 sudo에 대한 의사는 없으며 sudo를 실행할 때 실제 루트를 얻습니다. sudo의 마술은 실제로 setuid 권한 비트에서 비롯됩니다.
Lie Ryan

2
SDS, @CharlesDuffy : 아이디어가 sudo는 스와 원인 geteuid()getuid()서로 다를 수는 신화입니다. su 및 sudo는 명시 적으로 다른 방식으로 동작하도록 구성한 경우를 제외하고 지정된 명령 또는 쉘을 실행하기 전에 실제 사용자 ID와 유효 사용자 ID를 대상 사용자의 ID로 변경합니다. COMMAND EXECUTION 아래의 및 sudo (8)을 읽 거나 테스트 프로그램을 작성하여sudo id -usudo id -ru(둘 다 표시 0 )을 실행 하여 이를 확인 (sudo 용) 할 수 있습니다 .

7

@Hastur가 지적한 것처럼 루트 쉘을 얻는다면 약간의 차이점이 있습니다.

루트 쉘을 얻지 못하면 더 많은 차이점이 있습니다. 지원 멤버는 루트로 실행되는 sudo patch -p0 < /root/patch.file위치 와 같은 작업을 시도한 경험 patch이 있지만 <파일에서 파이핑하는 것은 아닙니다.


1
맞다 : 실제적인 관점은 종종 매뉴얼 페이지에서만 찾기 어려운 힌트를 제공합니다. 어떻게 당신이 강요 비슷한 상황을 극복하려면 더 체육관 예를 들어 [:-)] 같은 것을 쓰기 sudo /bin/bash -c "./patch -p0 < /root/patch". 리디렉션을 사용하여 파일을 만들 때 더 섬세한 경우 >입니다. 첫 번째 방법으로 최종 디렉토리에 쓸 수있는 권한이있는 경우에만 사용자에게 속한 파일을 작성합니다. 후자의 방법 으로 루트가 소유 한 파일을 만들 것입니다 ... Unix의 어두운면 ;-)
Hastur

1

sudo 액세스를 사용하면 로그 파일이 생성되지만 루트 액세스를 통해 직접 실행할 때는 그렇지 않습니다.


0

루트 액세스 권한을 원하는 수준에 따라 다릅니다. 시스템에서 다른 작업을 수행하는 여러 사용자가있는 경우 sudo가 더 이상적입니다. 자주 사용하는 한 가지 예는 응용 프로그램이나 데이터베이스를 다시 시작해야한다는 것입니다. 보안은 항상 최소 권한으로 수행하는 것이 가장 좋습니다. 나는 그룹을 사용하며 해당 그룹 만이 명시 적 조치를 수행하도록 허용합니다. 이 프로세스를 설명하는 좋은 책은 "Sudo Mastery : 실제 사용자를위한 사용자 액세스 제어"입니다. 사실 그것은 일반적으로 sudo에 관한 좋은 책입니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.