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


10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

따라서 sudo모든 사용자가 실행할 sudo수 있으며 set-user-id 비트 /usr/bin/sudo가 설정되어 있기 때문에 실행하는 모든 사용자 는 프로세스의 유효 사용자 ID로 root를 갖게 됩니다.

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

sudo와 su의 가장 눈에 띄는 차이점은 sudo 에는 사용자 암호 가 필요하고 su에는 루트 암호가 필요하다는 것입니다.

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

    그렇다면 어떤 사용자도 sudo자신의 암호를 실행 한 다음 제공 하여 수퍼 유저 권한을 얻을 수 있습니까? Linux가 일부 사용자에게이를 제한 할 수 있습니까?

  2. 실행 을 시작한 sudo 비밀번호 를 묻는 것이 맞 습니까? execve()main()/usr/bin/sudo

    프로세스의 euid가 root로 변경되었으므로 (/ usr / bin / sudo의 set-user-id 비트가 설정 되었기 때문에) sudo가 나중에 암호를 요구하는 시점은 무엇입니까?

감사.

https://unix.stackexchange.com/a/80350/674를 읽었 지만 위의 질문에 대답하지 않습니다.


3
사용자는 아니지만 sudoers 목록에 포함 된 사용자 만 해당됩니다.
로드리고

1
@Rodrigo 답변처럼 들리므로 답이 아닌 답변에 넣으십시오.
Philip Kendall

2
@PhilipKendall 그것은 OP의 의심의 일부에 대해서만 답변했습니다.
로드리고

답변:


22
  1. 가장 일반적인 구성에서 실행중인sudo 사용자의 비밀번호를 요청합니다 (예 : 프로세스의 실제 사용자 ID에 해당하는 사용자). 요점은의 사용자가 다른 인증을 제공하지 않아도 특정 사용자 (의 구성에 따라 결정됨)에게 추가 권한을 부여 하는 것입니다. 그러나 않는 검사는 실행하는 사용자 것을 정말로 그들이 주장하는 사람들이며, 그것은 (또는 어떤 인증 메커니즘가 설정 한 암호를 요청하여 해당 작업을 수행 일반적으로 PAM을 사용하여 -이 지문, 또는 두 가지 요소를 포함 할 수 있도록 인증 등). sudosudosudoerssudo sudosudo

    sudo루트 권한을 부여 할 필요는 없으며 다양한 권한을 부여 할 수 있습니다. 루트 권한을 가진 모든 사용자는 sudoers자신의 인증 만 사용하여 그렇게 할 수 있습니다. 그러나 사용자는 허용 할 수 없으며 (적어도을 사용하여 sudo) 할 수 없습니다 . 이것은 Linux 자체가 아니라 sudo(및 인증 설정)에 의해 시행됩니다 .

  2. sudo암호가 실행되기 시작한 후에 실제로 묻습니다. 달리 할 수 ​​없습니다 ( , 실행을 시작 하기 전에는 아무것도 할 수 없습니다 ). sudo암호 를 요구 하는 요점은 루트 일지라도 실행중인 사용자의 신원을 확인하는 것입니다 (일반적인 구성으로).


12

sudo일반적으로 비밀번호를 실행하는 사용자의 비밀번호를 요청하지만 비밀번호를 구성 할 수는 있습니다 .

달리 su(1)할 때, sudoers인증을 요구, 그것은 호출 한 사용자의 자격 증명이 아닌 대상 사용자 (또는 루트)의 자격 증명의 유효성을 검사합니다. 이것은 나중에 설명 할 rootpw, targetpwrunaspw플래그 를 통해 변경할 수 있습니다 .

설정 rootpwsudo항상 root의 비밀번호를 targetpw요구하고, 사용자의 비밀번호 sudo는 결국 프로그램을 실행할 것이며,에 runaspw설정된 사용자의 비밀번호를 요구합니다 runas_default.

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

비슷하게 모든 프로세스는 시스템 호출을 호출하여 커널 모드에서 코드를 실행할 수도 있습니다 open(). (루트와 같은 사용자 공간 코드와는 다릅니다.) 커널에 버그가없는 한, 임의의 코드를 실행할 수는 없습니다.


8

의 첫 번째 줄에서 man sudo:

DESCRIPTION
sudo는 허용 된 사용자가 보안 정책에 지정된대로 수퍼 유저 또는 다른 사용자로 명령을 실행할 수 있도록합니다. 호출 사용자의 실제 (유효하지 않은) 사용자 ID는 보안 정책을 조회 할 사용자 이름을 판별하는 데 사용됩니다.

그래서:

  1. 호출하는 사용자의 실제 (유효하지 않은) 사용자 ID가 사용됩니다 ...
  2. 예, 허용 된 모든 사용자는 sudo를 실행 한 다음 필요한 ( 구성된 ) 인증 을 제공하여 수퍼 유저 (또는 기타) 추가 권한을 얻을 수 있습니다 . 허용 및 구성은 모두 sudoers 파일에 설정됩니다.

  3. Linux가 일부 사용자에게이를 제한 할 수 있습니까?
    예, 가능하지만 그렇지 않습니다. Linux는 sudo 바이너리가 sudo 프로그램 및 파일 내부의 규칙 세트 (보안 정책)를 기반으로 결정하도록 허용하도록 설정되어 있습니다 /etc/sudoers. 일반적으로 다른 파일 (또는 대신)도 사용할 수 있습니다.

보낸 사람 man setresuid:

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

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

  2. 커널이 다른 사용자 (루트가 소유하고 루트 만 쓸 수있는 파일 및 디렉토리)가 수정할 수없는 실행 파일을로드 한 후 , 실행 파일 자체 (sudo)는 암호 (또는 구성된 다른 것)를 요청하여 사용자를 인증합니다. 부여 할 권한과 사용 권한을 결정합니다.


-1

에 대한 다른 좋은 답변에 추가 sudo:

su효과적으로 다른 사용자가 될 수 있습니다. 내 컴퓨터에서는 일상적인 사용을 위해 관리자로 실행하지 않습니다. 즉, 무엇보다도 (직접) 사용할 수 없습니다 sudo. 을 사용 하려면 관리자를 " sudo이용 su"한 다음 해당 역할을 사용할 수 있습니다 sudo. 이 상황에서 나는 관리자 계정의 암호를 두 번 입력합니다 . su한 번은 실행 하고 한 번은 실행하면 sudo.

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