$ 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에는 루트의 비밀번호가 필요합니다.
어떤 사용자의 비밀번호를 요청하고 있습니까
sudo
? 프로세스의 실제 사용자 ID로 표시되는 사용자입니까?그렇다면 모든 사용자가
sudo
자신의 암호를 실행하고 제공하여 수퍼유저 권한을 얻을 수 있습니까? Linux에서 특정 사용자를 제한할 수 있나요?sudo
입력에 필요한 비밀번호가 정확합니까?뒤쪽에execve()
실행을 시작하시겠습니까main()
?/usr/bin/sudo
이제 프로세스의 euid가 루트로 변경되었으므로(/usr/bin/sudo의 set-user-id 비트가 설정되었으므로) 나중에 sudo에 비밀번호를 묻는 이유는 무엇입니까?
감사해요.
내가 읽고https://unix.stackexchange.com/a/80350/674, 그러나 위의 질문에 대한 답변은 아닙니다.
답변1
가장 일반적인 구성에서는
sudo
사용자에게 비밀번호를 입력하라는 메시지가 표시됩니다.달리기sudo
(말씀하신 대로 프로세스의 실제 사용자 ID에 해당하는 사용자입니다.) 요점 은 사용자가 자신의 인증 이외의 추가 인증을 제공할 필요 없이 특정 사용자에게sudo
추가 권한( 의 구성에 따라 결정됨)을 부여하는 것입니다 .sudoers
하지만,sudo
하다실행 중인 사용자가sudo
실제로 자신이 주장하는 사람인지 확인합니다. 비밀번호(또는 일반적으로 PAM을 사용하여 사용자를 위해 설정된 인증 메커니즘sudo
- 지문이나 2단계 인증 등이 포함될 수 있음)를 요청하여 이를 수행합니다.sudo
반드시 루트 권한을 부여하는 것은 아니며, 다양한 권한을 부여할 수 있습니다. 루트가 허용된 모든 사용자는sudoers
자신의 인증만 사용하여 이를 수행할 수 있습니다. 사용자는 허용되지 않습니다(적어도 허용되지 않음sudo
). 이는 Linux 자체에서는 적용되지 않지만sudo
Linux(및 해당 인증 설정)에서는 적용됩니다.sudo
실행을 시작한 후 비밀번호를 묻습니다. 그렇지 않으면 할 수 없습니다(즉그건 아무것도 할 수 없어앞으로실행되기 시작합니다).sudo
비밀번호를 요청하는 목적(루트 사용자라도)은 실행 중인 사용자(일반적인 구성에서)의 신원을 인증하는 것입니다.
답변2
sudo
그러나 일반적으로 이를 실행하는 사용자의 비밀번호를 묻습니다.이는 구성될 수 있습니다.:
su(1)
인증이 필요한 경우 와 달리sudoers
대상 사용자(또는 루트 사용자)의 자격 증명이 아닌 호출 사용자의 자격 증명을 확인합니다. 이는 나중에 설명할rootpw
,targetpw
및 플래그를 통해 변경할 수 있습니다 .runaspw
설정 rootpw
항상 sudo
루트의 비밀번호를 묻고, 최종적으로 프로그램을 실행하는 사용자의 비밀번호를 targetpw
묻고 , 에 설정한 사용자의 비밀번호를 묻습니다 .sudo
runaspw
runas_default
이와 같이 설정된 바이너리는 sudo
실제로 루트 권한이 있는 모든 사용자가 시작할 수 있습니다. sudo
인증 코드에 아무런 문제가 없다고 가정하면 이 자체는 중요하지 않습니다.
마찬가지로 모든 프로세스는 시스템 호출(예:)을 호출하여 커널 모드에서 코드를 실행할 수도 있습니다 open()
. (이것은 루트의 사용자 공간 코드와 다릅니다.) 그러나 커널에 버그가 없는 한 임의의 코드를 실행할 수 없습니다.
답변3
첫 번째 줄부터 시작 man sudo
:
설명
sudo를 사용하면 허용된 사용자가 슈퍼유저 또는 보안 정책에 지정된 다른 사용자로 명령을 실행할 수 있습니다. 호출 사용자의 실제(유효하지 않은) 사용자 ID는 보안 정책을 쿼리하는 데 사용되는 사용자 이름을 결정하는 데 사용됩니다.
그래서:
- 호출한 사용자의 실제(잘못된) 사용자 ID를 사용하여...
예, 어떤 것(허용된) 사용자는 sudo를 실행한 후 다음을 제공하여 이 작업을 수행할 수 있습니다.구성된) 인증이 필요합니다. 허용되는 것과 구성되는 것은 sudoers 파일에 설정됩니다.
Linux에서 특정 사용자를 제한할 수 있나요?
예, 가능합니다. 하지만 그렇지 않습니다. Linux는 sudo 바이너리가 sudo 프로그램 및 파일 내의 규칙(보안 정책) 세트를 기반으로 결정을 내릴 수 있도록 설정되었습니다/etc/sudoers
. 종종 다른 파일을 사용할 수도 있습니다.
에서 man setresuid
:
설명
setresuid()는 호출 프로세스의 실제 사용자 ID, 유효 사용자 ID 및 저장된 set-user-ID를 설정합니다.
커널이 부여한 수퍼유저 권한을 얻는 유일한 방법은 suid 프로그램을 실행하는 것입니다. 그렇지 않을 수 없습니다. 이것이 Linux가 슈퍼유저 권한을 부여하는 방식입니다.
뒤쪽에커널은 다른 사용자가 수정할 수 없는 실행 파일을 로드합니다. (파일과 디렉터리는 루트가 소유하고 루트만 쓸 수 있습니다.) 실행 파일 자체(sudo)는 비밀번호(또는 구성된 다른 항목)를 요청하여 사용자를 인증합니다. ID는 부여 여부와 부여되는 권한을 결정합니다.
답변4
다른 좋은 답변 외에도 sudo
:
su
효과적으로 다른 사용자가 될 수 있습니다. 내 컴퓨터에서는 일상적인 사용을 위해 관리자로 실행하지 않습니다. 즉, 을 (직접) 사용할 수 없다는 뜻입니다 sudo
. 정말로 원할 경우 관리자가 될 sudo
수 있습니다. su
이 역할에 사용되는 사용자입니다 sudo
. 이 경우에는 관리자 계정의 비밀번호를 두 번(런타임에 한 번 su
, 런타임에 한 번) 입력하게 되었습니다 sudo
.