`sudo`는 어떤 사용자의 비밀번호를 요구합니까?

`sudo`는 어떤 사용자의 비밀번호를 요구합니까?
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

so는 모든 사용자가 실행할 수 있으며 set-user-id 비트가 설정되어 있으므로 sudo이를 실행하는 모든 사용자는 프로세스의 유효 사용자 ID로 루트를 갖게 됩니다 .sudo/usr/bin/sudo

~에서https://unix.stackexchange.com/a/11287/674

sudo와 su의 가장 분명한 차이점은 다음과 같습니다.sudo에는 사용자 비밀번호가 필요합니다su에는 루트의 비밀번호가 필요합니다.

  1. 어떤 사용자의 비밀번호를 요청하고 있습니까 sudo? 프로세스의 실제 사용자 ID로 표시되는 사용자입니까?

    그렇다면 모든 사용자가 sudo자신의 암호를 실행하고 제공하여 수퍼유저 권한을 얻을 수 있습니까? Linux에서 특정 사용자를 제한할 수 있나요?

  2. sudo입력에 필요한 비밀번호가 정확합니까?뒤쪽에 execve()실행을 시작하시겠습니까 main()?/usr/bin/sudo

    이제 프로세스의 euid가 루트로 변경되었으므로(/usr/bin/sudo의 set-user-id 비트가 설정되었으므로) 나중에 sudo에 비밀번호를 묻는 이유는 무엇입니까?

감사해요.

내가 읽고https://unix.stackexchange.com/a/80350/674, 그러나 위의 질문에 대한 답변은 아닙니다.

답변1

  1. 가장 일반적인 구성에서는 sudo사용자에게 비밀번호를 입력하라는 메시지가 표시됩니다.달리기 sudo(말씀하신 대로 프로세스의 실제 사용자 ID에 해당하는 사용자입니다.) 요점 은 사용자가 자신의 인증 이외의 추가 인증을 제공할 필요 없이 특정 사용자에게 sudo추가 권한( 의 구성에 따라 결정됨)을 부여하는 것입니다 . sudoers하지만,sudo 하다실행 중인 사용자가 sudo실제로 자신이 주장하는 사람인지 확인합니다. 비밀번호(또는 일반적으로 PAM을 사용하여 사용자를 위해 설정된 인증 메커니즘 sudo- 지문이나 2단계 인증 등이 포함될 수 있음)를 요청하여 이를 수행합니다.

    sudo반드시 루트 권한을 부여하는 것은 아니며, 다양한 권한을 부여할 수 있습니다. 루트가 허용된 모든 사용자는 sudoers자신의 인증만 사용하여 이를 수행할 수 있습니다. 사용자는 허용되지 않습니다(적어도 허용되지 않음 sudo). 이는 Linux 자체에서는 적용되지 않지만 sudoLinux(및 해당 인증 설정)에서는 적용됩니다.

  2. sudo실행을 시작한 후 비밀번호를 묻습니다. 그렇지 않으면 할 수 없습니다(그건 아무것도 할 수 없어앞으로실행되기 시작합니다). sudo비밀번호를 요청하는 목적(루트 사용자라도)은 실행 중인 사용자(일반적인 구성에서)의 신원을 인증하는 것입니다.

답변2

sudo그러나 일반적으로 이를 실행하는 사용자의 비밀번호를 묻습니다.이는 구성될 수 있습니다.:

su(1)인증이 필요한 경우 와 달리 sudoers대상 사용자(또는 루트 사용자)의 자격 증명이 아닌 호출 사용자의 자격 증명을 확인합니다. 이는 나중에 설명할 rootpw, targetpw및 플래그를 통해 변경할 수 있습니다 .runaspw

설정 rootpw항상 sudo루트의 비밀번호를 묻고, 최종적으로 프로그램을 실행하는 사용자의 비밀번호를 targetpw묻고 , 에 설정한 사용자의 비밀번호를 묻습니다 .sudorunaspwrunas_default

이와 같이 설정된 바이너리는 sudo실제로 루트 권한이 있는 모든 사용자가 시작할 수 있습니다. sudo인증 코드에 아무런 문제가 없다고 가정하면 이 자체는 중요하지 않습니다.

마찬가지로 모든 프로세스는 시스템 호출(예:)을 호출하여 커널 모드에서 코드를 실행할 수도 있습니다 open(). (이것은 루트의 사용자 공간 코드와 다릅니다.) 그러나 커널에 버그가 없는 한 임의의 코드를 실행할 수 없습니다.

답변3

첫 번째 줄부터 시작 man sudo:

설명
sudo를 사용하면 허용된 사용자가 슈퍼유저 또는 보안 정책에 지정된 다른 사용자로 명령을 실행할 수 있습니다. 호출 사용자의 실제(유효하지 않은) 사용자 ID는 보안 정책을 쿼리하는 데 사용되는 사용자 이름을 결정하는 데 사용됩니다.

그래서:

  1. 호출한 사용자의 실제(잘못된) 사용자 ID를 사용하여...
  2. 예, 어떤 것(허용된) 사용자는 sudo를 실행한 후 다음을 제공하여 이 작업을 수행할 수 있습니다.구성된) 인증이 필요합니다. 허용되는 것과 구성되는 것은 sudoers 파일에 설정됩니다.

  3. Linux에서 특정 사용자를 제한할 수 있나요?
    예, 가능합니다. 하지만 그렇지 않습니다. Linux는 sudo 바이너리가 sudo 프로그램 및 파일 내의 규칙(보안 정책) 세트를 기반으로 결정을 내릴 수 있도록 설정되었습니다 /etc/sudoers. 종종 다른 파일을 사용할 수도 있습니다.

에서 man setresuid:

설명
setresuid()는 호출 프로세스의 실제 사용자 ID, 유효 사용자 ID 및 저장된 set-user-ID를 설정합니다.

  1. 커널이 부여한 수퍼유저 권한을 얻는 유일한 방법은 suid 프로그램을 실행하는 것입니다. 그렇지 않을 수 없습니다. 이것이 Linux가 슈퍼유저 권한을 부여하는 방식입니다.

  2. 뒤쪽에커널은 다른 사용자가 수정할 수 없는 실행 파일을 로드합니다. (파일과 디렉터리는 루트가 소유하고 루트만 쓸 수 있습니다.) 실행 파일 자체(sudo)는 비밀번호(또는 구성된 다른 항목)를 요청하여 사용자를 인증합니다. ID는 부여 여부와 부여되는 권한을 결정합니다.

답변4

다른 좋은 답변 외에도 sudo:

su효과적으로 다른 사용자가 될 수 있습니다. 내 컴퓨터에서는 일상적인 사용을 위해 관리자로 실행하지 않습니다. 즉, 을 (직접) 사용할 수 없다는 뜻입니다 sudo. 정말로 원할 경우 관리자가 될 sudo수 있습니다. su이 역할에 사용되는 사용자입니다 sudo. 이 경우에는 관리자 계정의 비밀번호를 두 번(런타임에 한 번 su, 런타임에 한 번) 입력하게 되었습니다 sudo.

관련 정보