sudo 명령에 루트 암호가 필요하지 않은 이유는 무엇입니까?


48

나는 잠시 동안 리눅스를 사용하고 있었고 입력 할 때마다 sudo루트 사용자로 전환하여 명령을 받았다고 생각했습니다.

분명히 필요한 것은 내 사용자 계정의 비밀번호이기 때문에 사실이 아닙니다. 여러 사용자와 작업하지 않았기 때문에 실제로는 실제로 눈치 채지 못했습니다.

Ubuntu가 첫 번째 계정을 어떻게 설정했는지 잘 모르겠습니다. 루트 사용자가 있습니까? 나는 뿌리인가? 설치시 새 사용자를 만들었으나 루트 권한을 부여한 것 같습니다. 여기 조금 혼란스러워 ...

그렇다면 왜 사용자 비밀번호로 루트 명령을 실행할 수 있습니까?


어떤 사용자를 사용하여 비밀번호가 필요하고 어떤 비밀번호를 사용하지 않습니까? 어떤 명령을 실행하고 있습니까? sudo는 암호를 다시 입력하기 전에 한동안 암호를 저장합니다.
Braiam

11
sudo"setuid"비트가 설정되어 있습니다. 따라서 그것은 그것을 시작한 사용자가 아니라 그것을 소유 한 사용자 (실수하지 않은 경우 모든 표준 시스템에서 루트 임)로 실행됩니다. sudo그런 다음 /etc/sudoers파일 을로드하고 누가 시작했는지에 따라 허용되는 내용을 확인합니다.
LawrenceC


1
다른 사람이 말한 것을 반복하면 죄송하지만 찾을 수 없습니다. 답은 정책 결정입니다. 동기 부여에 대한 최선의 추측은 sudo권한 이있는 많은 사람들이 있고 지리적으로 분산 된 위치에서 일하고 24x7 교대 근무 하는 대규모 시설에서는 한 사람의 권한있는 액세스를 즉시 취소 할 수 있기를 원한다는 것입니다 (예 : 당신은 그의 충절을 의심합니다). 모두가 유일한 루트 암호를 사용하고 있고 사전 조정없이 암호를 변경하면 혼란이 발생할 수 있습니다. …
G-Man

1
@HagenvonEitzen 나는 며칠 늦었다는 것을 알고 있지만 이것이 어떻게 우리의 질문에 속하지 않습니까?
strugee

답변:


65

세부적으로 다음과 같은 방식으로 작동합니다.

  1. /usr/bin/sudo실행 파일에 setuid 비트가 설정되어 있으므로 다른 사용자가 실행하더라도 파일 소유자의 사용자 ID (이 경우 루트)로 실행됩니다.

  2. sudo/etc/sudoers가지고있는 권한과 호출중인 명령을 실행할 수 있는지 여부를 파일 에서 점검합니다 . 간단히 말해 메커니즘 /etc/sudoers을 사용하여 어떤 사용자가 어떤 명령을 실행할 수 있는지 정의하는 파일입니다 sudo.

    그 파일이 내 우분투에서 어떻게 보이는지입니다.

    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    
    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL
    
    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL
    

    세 번째 줄은 아마도 당신에게 관심이있는 것입니다. "sudo"그룹의 모든 사용자가 모든 사용자로 명령을 실행할 수 있습니다.

    설치 중에 Ubuntu가 첫 번째 계정을 설정하면 해당 계정이 "sudo"그룹에 추가됩니다. group명령으로 어떤 사용자가 속하는 그룹을 확인할 수 있습니다 .

  3. sudo비밀번호를 묻습니다. 루트 비밀번호가 아닌 사용자 비밀번호가 필요하다는 사실에 관해서는 sudoers manual 에서 발췌 한 것입니다 .

    인증 및 로깅

    sudoers 보안 정책에서는 sudo를 사용하기 전에 대부분의 사용자가 자신을 인증해야합니다. 호출하는 사용자가 root이거나 대상 사용자가 호출하는 사용자와 같거나 정책이 사용자 또는 명령에 대한 인증을 비활성화 한 경우 암호가 필요하지 않습니다. su (1)과 달리 sudoers에 인증이 필요한 경우 대상 사용자 (또는 루트) 자격 증명이 아닌 호출하는 사용자 자격 증명의 유효성을 검사합니다. 이것은 후술하는 rootpw, targetpw 및 runaspw 플래그를 통해 변경 될 수 있습니다.

    그러나 실제로 sudo는 사용자 비밀번호가 필요하지 않습니다. 그것은 당신이 정말로 당신임을 보장하고 잠재적으로 위험한 명령을 실행하기 전에 일종의 경고 (또는 멈출 기회)를 제공하기 위해 요구합니다. 암호 요청을 끄려면 sudoers 항목을 다음으로 변경하십시오.

    %sudo   ALL=(ALL:ALL) NOPASSWD: ALL
    
  4. 인증 후 sudo호출 된 명령을 실행하는 하위 프로세스가 생성됩니다. 자식은 부모로부터 루트 사용자 ID ( sudo프로세스)를 상속합니다 .


따라서 질문에 정확하게 대답하십시오.

명령을 위해 루트 사용자로 전환한다고 생각했습니다.

당신이 옳았. 앞에 sudo오는 각 명령 은 루트 사용자 ID 로 실행됩니다.

루트 사용자가 있습니까?

예, 시스템 설치 중에 생성 된 사용자 계정과는 별도로 루트 사용자 계정이 있습니다. 그러나 기본적으로 우분투에서는 루트 사용자로 대화식 터미널에 로그인 할 수 없습니다.

나는 뿌리인가?

아니요, 당신은 루트가 아닙니다. 당신은 단지 루트로 개별 명령을 실행할 수있는 권한이 사용하여, sudo위에서 설명한 메커니즘을.

그렇다면 왜 사용자 비밀번호로 루트 명령을 실행할 수 있습니까?

sudo내부 보안 메커니즘 으로 인해 사용자의 비밀번호 만 입력해야합니다 . 쉽게 끌 수 있습니다. /usr/bin/sudo입력 한 비밀번호가 아니라 의 setuid 비트 때문에 루트 권한을 얻습니다 .


6
대답은 실제로 setuid 부분으로 시작해야합니다. 이것이 실제로 가능한 이유이기 때문입니다. / etc / sudoers는 sudo 명령의 유연성을위한 이유입니다.
다니엘 쿨만

흥미 롭군 sudo암호를 입력하지 않고 실행할 수 있음을 지정할 수 있다는 것을 몰랐습니다 . 좋은 답변입니다!
jwir3

1
에 sudo rootpw플래그 를 사용하여 루트 비밀번호를 요청하도록 sudo를 구성 할 수 있습니다 sudoers.
Reinstate Monica-M. Schröder

2
실제로 루트 사용자로 로그인 있습니다sudo su - root . 그렇게하면 루트 터미널이 제공됩니다. 그러나 루트로 데스크탑 세션에 쉽게 로그인 할 수 없습니다.
jmiserez

1
기본적으로 sudo루트 권한이 있으며 구성 파일을 기반 으로 루트 권한을 부여할지 여부를 결정합니다.
Siyuan Ren

15
  • 요점은 sudo다른 계정의 비밀번호를 요청하지 않고 다른 사람의 특권 (보통 루트)을 부여하는 것입니다 (와 달리 su).

  • sudo 발신자가 잠금 해제 된 단말기를 오용하지 않도록하기 위해 여기에서 비밀번호를 묻습니다.

  • Ubuntu와 다른 많은 Linux 및 Unix OS는 설치시 생성 된 초기 계정에 다음과 같은 명령을 실행할 수있는 권한을 부여합니다 root.

  • rootLinux에서는 여전히 계정 이지만 root보안 및 추적 성을 향상시키기 위해 직접 로그인은 기본적으로 비활성화되어 있습니다.


7
직접 루트 로그인은 기본적으로 비활성화되어 있지만 우분투에는 여전히 루트 계정이 있습니다. 기본적으로 역할 인 최소한 Solaris에서는 더 이상 계정이 아닙니다.
jlliagre

고마워-나는 그것이 어쨌든 어떻게 작동했는지 항상 궁금해했으며 이제는 훨씬 더 의미가 있습니다.
mikeserv

5

Piotr은 sudo작동 방식 에 대해 매우 잘 설명했습니다 . 그러나 그는 이런 식으로 작동 하는지 동기 부여하지 않았 으므로 여기에 추가하려고합니다.

sudo명령이 작성 되기 전에 명령이있었습니다 su. 이 명령을 사용하면 한 사용자가 다른 사용자로 명령을 실행할 수 있습니다 root( 보통 sudo기본 대상 사용자 임). 그것은 완전히 무차별 적이었습니다. 어떤 명령이든 실행할 수 있습니다. 모든 사용자가 사용할 수 있으므로 해당 사용자로 로그인하는 것과 실질적으로 동일하므로 대상 사용자의 비밀번호를 알아야합니다.

어느 시점에서 조금 더 많은 액세스 제어가 추가되었습니다.를 사용 su하려면 wheel그룹 의 구성원이어야합니다 . 그러나 여전히 모든 명령을 실행할 수 있으므로 여전히 암호를 알아야합니다.

그러나 사용자가 서로 또는 수퍼 유저의 암호를 알아야하는 것은 그다지 안전하지 않았습니다. 종종 특정 사용자에게 다른 계정에 대한 제한된 액세스 권한을 부여하려고합니다 (이것은 최소 권한 원칙 이라는 보안 개념의 일부입니다 ). 또한 여러 사람이 계정의 비밀번호를 알고 있고 해당 계정이 실수 나 악용과 관련이있는 경우 실제로 어떤 계정을 사용했는지 알 수 없습니다.

그렇게 sudo만들어졌습니다. 사용자가 명령을 실행할 수 있도록하는 대신, Piotr의 답변에서 간략하게 다룬 정교한 구성 파일이 있으며,이를 사용하는 사람, 전환 할 수있는 사용자 및 실행할 수있는 명령을 정확하게 지정합니다. 누가 누구에게 무엇을 할 수 있는지에 대한 세밀한 제어를 통해 더 이상 대상 계정의 암호를 사용자에게 제공 할 필요가 없습니다. 그렇게하면, 해당 사용자로 로그인하여 구성 파일의 모든 제어를 쉽게 우회 할 수 있습니다. 대신, 일반적으로 비밀번호를 입력하여 자신이 로그인 한 사람임을 증명해야합니다. 이는 터미널을 방치 한 상태에서 누군가 계정을 이용하지 못하도록하기위한 것입니다.

이 요구 사항은 수퍼 유저에게는 적용되지 않습니다.이 계정은을 사용하지 않고 시스템에 거의 모든 작업을 수행 할 수 sudo있으므로 불필요한 것으로 간주됩니다. 구성 파일에서 사용자가 암호를 전혀 입력하지 않아도되도록 지정할 수도 있습니다. 일부 조직에서는 워크 스테이션 환경의 물리적 보안이 남용을 방지하기에 충분하다고 생각할 때이 암호를 사용합니다.


나는 이것을 탐구하지는 않았지만 su가 가지고 있지 않은 sudo의 기능 중 하나는 문제를 쉽게 추적하기 위해 어떤 사용자가 어떤 명령을 실행했는지 기록하는 것입니다. 그들의 출처. 방금 내 kubuntu 시스템을 보았는데 그러한 로그가 표시되지 않으므로 이것이 기본 동작이 아닙니다.
Joe

/var/log/auth.log에서 sudo 로깅을 발견했습니다. 중국의 일부 IP를 포함하여 내 시스템에 루트 ssh 액세스 권한을 얻으려는 많은 다른 것들과 함께 sudo 로깅을 발견했습니다. 따라서 sudo를 보려면 필터링해야합니다. grep 등을 통해
Joe

옳은. su또한 로그하지만 새 쉘을 시작하기 때문에 누군가가 쉘을 실행했다는 사실 만 기록합니다.
Barmar

로그에 의존 할 수 없으며, 루트 권한을 가진 사람은 누구나 로그를 변경할 수 있습니다 (다른 시스템에 로그인하지 않고 로깅 트랜잭션이 완료 될 때까지 액세스 권한을 부여하지 않는 경우). 그러나 sudo루트 암호를 필요한 모든 사람에게 다시 발급하지 않고도 권한을 취소 할 수 있습니다.
ctrl-alt-delor

1
@richard sudo사용자가 실행할 수있는 명령을 제한 할 수 있으므로 로그를 덮어 쓰는 명령에 액세스 권한을 부여하지 않도록 할 수 있습니다.
Barmar

3

귀하의 질문에 대한 답변은 다음과 같습니다

당신이 명령을 실행하면 sudo를을 , 당신이 명령을 실행 상승 priviliges , 즉 루트 priviliges . 루트 권한 을 부여하는 sudoers 파일에 사용자 (사용자)가 추가되었으므로 일반 사용자 비밀번호 만 입력하면 됩니다 .


2
sudo를 제외하고는 상승 된 권한을 의미하는 것이 아니라 현재 사용자와 다른 권한을 의미합니다. 예를 들어 쉘이없는 일반 사용자로 프로그램을 실행할 수 있습니다. 또한 sudoers 파일에 있으면 루트가 제공되지 않습니다.
James Tocknell

1
@aragilar yes sudo는 항상 상승 된 권한을 부여하지는 않지만 인증을 확인한 후 권한을 떨어 뜨릴 수있는 상승 된 권한으로 실행됩니다. 사용자를 변경할 수 있으려면 이러한 높은 권한이 필요합니다.
ctrl-alt-delor

1
물론, sudo상승 된 권한을 사용하지 않습니다 (하지만 예를 들어, 마운트도하지, sudo는 고유 아니다),하지만 당신은 즉, 호출 명령 command인은 sudo command(의 설정 내용에 따라하지 않을 수 있습니다 /etc/sudoers).
James Tocknell 2016 년

1

먼저 계정 비활성화는 일반적으로 암호화 된 비밀번호를 *로 설정하여 이루어지며 이는 문자열의 암호화 된 값이 아닙니다. 나는 지금 확인할 수 없지만 우분투가 뿌리를 위해하는 일이라고 생각합니다. 기술적으로 우분투에는 루트 암호가 없습니다.

그러나 sudo가 Ubuntu보다 우선합니다. 루트 암호가있는 시스템을 위해 설계되었습니다. 왜 루트 암호가 필요하지 않습니까? 기본적으로 sudo는 특정 사용자에게 특정 명령을 실행할 수있는 권한을 부여하도록 설계되었습니다. 예를 들어 개발자 루트 액세스 권한으로 웹 응용 프로그램을 다시 시작할 수 있지만 임의의 서버는 시작할 수 없습니다. 반면에 루트 암호를 알면 무제한 액세스가 가능합니다. login 또는 su를 사용하여 루트 쉘을 열고 임의의 명령을 실행할 수 있습니다. sudo는 해당 수준의 액세스 권한이없는 사용자를 위해 작동해야하므로 루트 암호를 실행할 필요가 없습니다.


또한 루트 암호를 변경하지 않고도 사용자의 루트 권한을 취소 할 수 있습니다.
Ian D. Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.