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

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

나는 한동안 Linux를 사용해 왔으며 명령을 입력할 때마다 sudo명령을 실행하기 위해 루트 사용자로 전환하는 것 같습니다.

분명히 이는 내 사용자 계정의 비밀번호만 필요하므로 이는 사실이 아닙니다. 나는 여러 사용자와 작업하지 않기 때문에 현실 세계에서는 이것을 실제로 눈치 채지 못하는 것 같습니다.

Ubuntu에서 첫 번째 계정을 설정하는 방법을 잘 모르겠습니다. 루트 사용자가 있습니까? 내가 뿌리인가? 방금 설치할 때 새 사용자를 생성했는데 루트 액세스 권한이 부여된 것 같습니다. 여기서 조금 혼란 스럽습니다 ...

그렇다면 내 사용자 비밀번호를 사용하여 루트 명령을 실행할 수 있는 이유는 무엇입니까?

답변1

자세하게는 다음과 같이 작동합니다.

  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 매뉴얼:

    인증 및 로깅

    sudoers 보안 정책에 따르면 대부분의 사용자는 sudo를 사용하기 전에 인증해야 합니다. 호출 사용자가 루트이거나 대상 사용자가 호출 사용자와 동일하거나 정책이 사용자 또는 명령에 대한 인증을 비활성화한 경우 비밀번호가 필요하지 않습니다.su(1)과 달리 sudoer가 인증을 요구할 때 대상 사용자(또는 루트 사용자)의 자격 증명이 아닌 호출 사용자의 자격 증명을 확인합니다.이는 나중에 설명할 rootpw, targetpw 및 runaspw 플래그를 통해 변경할 수 있습니다.

    그러나 실제로는 sudo사용자 비밀번호가 필요하지 않습니다. 잠재적으로 위험한 명령을 호출하기 전에 귀하가 실제로 귀하인지 확인하고 일종의 경고(또는 중지할 기회)를 제공하기 위해 필요합니다. 비밀번호 묻기를 끄려면 sudoers 항목을 다음과 같이 변경하세요.

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


따라서 귀하의 질문에 정확하게 대답하려면 다음을 수행하십시오.

명령을 실행하기 위해 루트 사용자로 전환하고 있다고 생각했습니다.

당신 말이 맞아요. 로 시작하는 모든 명령은 sudo루트 사용자 ID로 실행됩니다.

루트 사용자가 있습니까?

예, 시스템 설치 중에 생성된 사용자 계정과 별도로 루트 사용자 계정이 있습니다. 그러나 기본적으로 Ubuntu에서는 대화형 터미널에 루트로 로그인하는 것을 허용하지 않습니다.

내가 뿌리인가?

아니요, 당신은 루트가 아닙니다. 너루트로 단일 명령을 실행할 수 있는 권한만 있습니다., sudo위의 메커니즘을 사용합니다.

그렇다면 내 사용자 비밀번호를 사용하여 루트 명령을 실행할 수 있는 이유는 무엇입니까?

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

답변2

  • 의 전체 목적은 sudo다른 계정( root 와 다름)의 비밀번호를 묻지 않고 다른 사람(일반적으로 root)에게 권한을 부여하는 것입니다 su.

  • sudo여기서 비밀번호를 묻는 것은 통행인이 잠금 해제된 단말기를 남용하지 않도록 하기 위한 것입니다.

  • Ubuntu와 기타 Linux 및 Unix 운영 체제는 설치 시 생성된 초기 계정을 부여합니다 root.

  • rootLinux에서는 계정을 유지 하지만 root더 나은 보안과 추적성을 위해 직접 로그인이 기본적으로 비활성화되어 있습니다.

답변3

Piotr는 그것이 어떻게 작동하는지 아주 잘 설명합니다 sudo. 하지만 그 사람은 별로 영감을 주지 않았어이것이 작동하는 방식이므로 여기에 추가하려고 합니다.

sudosu명령을 만들기 전에 이미 명령이 있습니다 . 일반적으로 이 명령을 사용하면 한 사용자가 다른 사용자로서 명령을 실행할 수 있습니다 root( 와 마찬가지로 sudo이것이 기본 대상 사용자입니다). 이는 완전히 무차별적이며 어떤 명령이라도 실행할 수 있습니다. 모든 사용자가 사용할 수 있고 해당 사용자로 효과적으로 로그인할 수 있으므로 대상 사용자의 비밀번호를 알아야 합니다.

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

그러나 사용자에게 서로의 비밀번호나 슈퍼유저의 비밀번호를 알려달라고 요구하는 것은 그다지 안전하지 않습니다. 일반적으로 특정 사용자에게 다른 계정에 대한 제한된 액세스 권한만 부여하려고 합니다(이는 "보안 개념"이라는 보안 개념의 일부입니다).최소 권한의 원칙). 또한 책임을 묻는 것도 어렵습니다. 여러 사람이 계정의 비밀번호를 알고 있고 해당 계정이 실수나 남용에 연루된 경우 실제로 누가 그랬는지 알 수 없습니다.

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

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

답변4

첫째, 계정 비활성화는 일반적으로 암호화된 비밀번호를 *로 설정하여 수행됩니다. 이는 어떤 문자열의 암호화된 값도 아닙니다. 지금은 확인할 수 없지만 Ubuntu는 루트에서도 동일한 작업을 수행한다고 생각합니다. 따라서 기술적으로 Ubuntu에는 루트 비밀번호가 없습니다.

그러나 sudo는 Ubuntu보다 앞서서 루트 비밀번호가 보장되는 시스템용으로 설계되었습니다. 그렇다면 왜 루트 비밀번호가 필요하지 않습니까? 기본적으로 sudo는 특정 사용자에게 특정 명령을 실행할 수 있는 권한을 부여하도록 설계되었습니다. 예를 들어 개발자가 루트 액세스로 웹 애플리케이션을 다시 시작할 수는 있지만 임의 서버 시작은 허용되지 않습니다. 반면에 루트 비밀번호를 알면 무제한 액세스가 가능합니다. login 또는 su를 사용하여 루트 쉘을 열고 임의의 명령을 실행할 수 있습니다. sudo는 해당 액세스 수준이 없는 사람들에게도 작동해야 하기 때문에 실행하는 데 루트 비밀번호가 필요하지 않습니다.

관련 정보