루트가 아닌 권한으로 초기 사용자 공간에서 프로그램을 실행할 수 있습니까?

루트가 아닌 권한으로 초기 사용자 공간에서 프로그램을 실행할 수 있습니까?

메인 루트 파일 시스템을 설치하기 전에 초기 사용자 공간에서 init 스크립트로 프로그램을 실행하고 있습니다.

루트 권한 없이 애플리케이션을 실행할 수 있나요?

명백한 문제는 시작 프로세스의 초기 단계에 "사용자"가 없다는 것입니다.

답변1

루트 권한 없이 애플리케이션을 실행할 수 있나요?

그게 다야. Linux가 MULTIUSER를 지원하도록 컴파일되었다고 가정합니다.)

명백한 문제는 시작 프로세스의 초기 단계에 "사용자"가 없다는 것입니다.

su네, initramfs에 또는 를 추가하려고 하면 sudo많은 구성 파일( /etc/passwd, /etc/groups/etc/shadow) 을 추가해야 합니다. 그러나 이러한 복잡성은 Linux에 고유한 것이 아닙니다. 결국 UID는 단지 숫자일 뿐이므로 루트 권한을 제거할 수 있는 장난감 프로그램을 만드는 것이 목표라면 매우 쉽습니다.

#include <stdlib.h>
#include <unistd.h>
int main(int argc, char** argv)
{
  setuid(atoi(argv[1]));
  execvp(argv[2], argv+2);
}

로 컴파일하면 toysu다음과 같이 호출할 수 있습니다.

toysu 1234 touch /tmp/example

사용할 UID는 어디에 1234있고 나머지는 실행할 명령입니다. 처음부터 루트가 아니면 작동하지 않으므로 sudo일반 시스템에서 테스트하려면 명령 앞에 접두사를 붙입니다.

관련 정보