Linux - su 및 sudo 바이너리가 set-UID 루트여야 하는 이유는 무엇입니까?

Linux - su 및 sudo 바이너리가 set-UID 루트여야 하는 이유는 무엇입니까?

나는 명시된 질문에 대한 올바른 이유를 찾으려고 노력하고 있습니다. 내 이해는 다음과 같습니다

  • sudo루트에서만 읽을 수 있는 파일을 읽어야 하므로 /etc/sudoersset-UID 루트여야 합니다.
  • su다른 실제 유효 UID를 사용하여 새 셸을 생성할 예정이며 비밀번호를 확인해야 합니다. 비밀번호를 확인하려면 을 읽어야 하므로 /etc/shadowset-UID 루트여야 합니다. 비밀번호를 확인한 후 분기된 프로세스를 호출해야 하며 setuid()임의의 UID 인수를 사용하려면 해당 상위 프로세스가 유효한 UID로 루트를 가져야 하므로 이는 또 다른 이유가 됩니다.

위의 이유가 맞나요?

답변1

귀하의 이유는 대부분 정확하지만 두 경우( susudo) 모두 루트로 실행해야 하는 기본 이유는 현재 프로세스의 다양한 사용자 및 그룹 식별자를 변경할 수 있어야 한다는 것입니다. 여기에는 다음과 같은 함수 호출이 포함됩니다.setreuid호출 프로세스가 루트로 실행 중인 경우 임의의 사용자 및 그룹에 대해서만 작동합니다.

둘 다 su루트 sudo로 실행해야 하는 다른 기능도 있지만 위와 비교할 때 사실상 보조 세부 정보입니다. 당신이 언급했듯이, sudo읽어야 합니다 /etc/sudoers. 그러나 후자가 루트에서만 읽을 수 있다는 사실은 어려운 요구 사항이 아닙니다. 두 프로그램 모두 PAM을 사용하여 인증을 수행할 수 있지만 일반적으로 /etc/shadow루트에서만 읽을 수 있는 읽을 수 있어야 하는 폴백도 포함합니다 . 목록은 계속됩니다. 그러나 피할 수 없는 사실은 사용자 및/또는 그룹을 변경하는 능력이 루트에만 부여된다는 점이므로 실제로는 중요하지 않습니다. 이것이 바로 susetuid sudo루트인 이유입니다.

sudo의 내부는 어떻게 작동하나요?관련 질문은 추가적인 배경 지식을 제공합니다.

관련 정보