Linux - su 및 sudo 바이너리에 UID 루트를 설정해야 하는 이유는 무엇입니까?

Linux - su 및 sudo 바이너리에 UID 루트를 설정해야 하는 이유는 무엇입니까?

위 문제의 정확한 원인을 찾으려고 노력 중입니다. 내 이해는 다음과 같습니다

  • sudo/etc/sudoers루트로만 읽을 수 있는 파일을 읽어야 하므로 -UID 루트를 설정해야 합니다.
  • su다른 실제 유효 UID를 사용하여 새 셸이 생성되며 비밀번호를 확인해야 합니다. 비밀번호를 확인하려면 읽기가 필요 /etc/shadow하므로 -UID 루트를 설정해야 합니다. 비밀번호를 확인한 후 setuid()UID 매개변수를 사용하여 분기된 프로세스를 호출해야 하며 해당 상위 프로세스는 유효한 UID로 루트를 가져야 하므로 또 다른 이유가 발생합니다.

위의 이유가 맞나요?

답변1

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

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

sudo는 내부적으로 어떻게 작동하나요?관련 질문은 추가 배경 정보를 제공합니다.

관련 정보