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

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

init=/myscript를 사용하여 부팅 cmdline에서 호출할 자체 PID 1 초기화 스크립트를 만들려고 합니다. 커널을 사용하여 실제 파일 시스템에서 어떻게 작동하게 할 수 있습니까?

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

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

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

답변1

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

로 실행하면 비트가 설정된 경우 바이너리 소유자와 일치합니다 root.euidsetuid

의 소유권을 확인하세요 /bin/mount.

답변2

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

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

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

sudo mount /mnt/foo

플래그 로 지정하지 않는 한 -u, sudo 명령의 사용자는 기본적으로 루트입니다. sudo를 통해 명령을 실행하면 설명된 문제가 해결됩니다. 단, UID가 1000인 계정이 적절한 위치에 올바르게 설정되어 있어야 합니다./etc/sudoers또는/etc/sudoers.d파일.

또한보십시오

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

관련 정보