
나는 명시된 질문에 대한 올바른 이유를 찾으려고 노력하고 있습니다. 내 이해는 다음과 같습니다
sudo
루트에서만 읽을 수 있는 파일을 읽어야 하므로/etc/sudoers
set-UID 루트여야 합니다.su
다른 실제 유효 UID를 사용하여 새 셸을 생성할 예정이며 비밀번호를 확인해야 합니다. 비밀번호를 확인하려면 을 읽어야 하므로/etc/shadow
set-UID 루트여야 합니다. 비밀번호를 확인한 후 분기된 프로세스를 호출해야 하며setuid()
임의의 UID 인수를 사용하려면 해당 상위 프로세스가 유효한 UID로 루트를 가져야 하므로 이는 또 다른 이유가 됩니다.
위의 이유가 맞나요?
답변1
귀하의 이유는 대부분 정확하지만 두 경우( su
및 sudo
) 모두 루트로 실행해야 하는 기본 이유는 현재 프로세스의 다양한 사용자 및 그룹 식별자를 변경할 수 있어야 한다는 것입니다. 여기에는 다음과 같은 함수 호출이 포함됩니다.setreuid
호출 프로세스가 루트로 실행 중인 경우 임의의 사용자 및 그룹에 대해서만 작동합니다.
둘 다 su
루트 sudo
로 실행해야 하는 다른 기능도 있지만 위와 비교할 때 사실상 보조 세부 정보입니다. 당신이 언급했듯이, sudo
읽어야 합니다 /etc/sudoers
. 그러나 후자가 루트에서만 읽을 수 있다는 사실은 어려운 요구 사항이 아닙니다. 두 프로그램 모두 PAM을 사용하여 인증을 수행할 수 있지만 일반적으로 /etc/shadow
루트에서만 읽을 수 있는 읽을 수 있어야 하는 폴백도 포함합니다 . 목록은 계속됩니다. 그러나 피할 수 없는 사실은 사용자 및/또는 그룹을 변경하는 능력이 루트에만 부여된다는 점이므로 실제로는 중요하지 않습니다. 이것이 바로 su
setuid sudo
루트인 이유입니다.
sudo의 내부는 어떻게 작동하나요?관련 질문은 추가적인 배경 지식을 제공합니다.