init=로 실행되는 Shebang 스크립트가 initrd에서 실행될 때 euid가 0이지만 그렇지 않은 이유는 무엇입니까?

init=로 실행되는 Shebang 스크립트가 initrd에서 실행될 때 euid가 0이지만 그렇지 않은 이유는 무엇입니까?

init=/myscript를 사용하여 시작 명령줄에서 호출할 자체 PID 1 초기화 스크립트를 만들려고 합니다. 모든 커널의 실제 파일 시스템에서 작동하도록 하려면 어떻게 해야 합니까?

initrd에서 실행하면 잘 작동하고 등을 마운트할 수 있습니다. 하지만 initrd 없이 파일 시스템에서 사용하면 다음과 같은 이유로 마운트할 수 없습니다.

mount: only root can do that (effective UID is 1000)

실패한 명령을 추적하면 필연적으로 geteuid32()가 실행되고 1000이 반환됩니다. 왜? 어떻게 euid 0으로 실행할 수 있나요?

답변1

initon 에는 특별한 처리가 없으므로 initrd다른 문제가 있을 것입니다.

다음으로 실행하는 경우 root이 비트가 설정되면 euid바이너리 소유자가 일치됩니다 .setuid

제목을 확인하세요 /bin/mount.

답변2

권한이 없는 계정에서 Sudo 사용

이 오류는 문제를 알려줍니다. 즉, 탑재를 호출하기 위해 UID 0의 루트 계정이 아닌 UID 1000의 "필멸" 계정을 사용하고 있습니다. 많은 시스템 기능을 루트로 실행해야 합니다. initrd와 같은 많은 프로세스가 루트로 실행되므로 명령을 실행할 수 있는 충분한 권한이 있습니다. 그러나 일일 사용자 계정에서 무언가를 실행하려면 다음이 필요합니다.또는스도다른 사용자로 작업을 수행합니다.

~을 위한, 다음과 같이 호출하고 싶습니다.

sudo mount /mnt/foo

이 플래그를 지정하지 않으면 -usudo 명령의 사용자는 기본적으로 루트로 설정됩니다. UID 1000에 대한 계정이 적절하게 설정된 경우 sudo를 통해 명령을 실행하면 설명된 문제가 해결됩니다./etc/sudoers또는/etc/sudoers.d문서.

당신은 또한 볼 수 있습니다

  • man 5 sudo
  • man 5 sudoers
  • man 8 visudo

관련 정보