為什麼從 initrd 運行時,作為 init= 運行的 shebang 腳本的 euid 為 0,而在其他情況下則不然?

為什麼從 initrd 運行時,作為 init= 運行的 shebang 腳本的 euid 為 0,而在其他情況下則不然?

我正在嘗試建立自己的 PID 1 初始化腳本,以便使用 init=/myscript 從啟動命令列呼叫。我怎麼能讓它在任何核心的真實檔案系統上工作?

當它在 initrd 中運行時,它工作正常並且可以掛載東西等 - 但是當我在沒有 initrd 的檔案系統上使用它時,它無法掛載東西,因為:

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

當我 strace 任何失敗的命令時,它不可避免地會發出 geteuid32() 並返回 1000。我怎樣才能以 euid 0 身份運行?

答案1

initon沒有特殊處理initrd,所以肯定還有其他問題。

如果運行為root,則如果設定了euid該位,則將匹配二進位檔案的擁有者。setuid

檢查 上的所有權/bin/mount

答案2

從非特權帳戶使用 Sudo

該錯誤告訴您問題所在:您正在使用 UID 1000 的「凡人」帳戶,而不是 UID 0 的 root 帳戶來呼叫掛載。許多系統功能需要以 root 身分運作。許多進程(如 initrd)以 root 身份運行,因此命令有足夠的權限運行。但是,當您從日常用戶帳戶運行某些東西時,您需要或者須藤以不同使用者身分執行操作。

為了,你想這樣稱呼它:

sudo mount /mnt/foo

除非該標誌指定-u,否則 sudo 命令的使用者預設為 root。透過 sudo 運行命令應該可以解決您所描述的問題,前提是 UID 1000 的帳戶在適當的位置正確設定。/etc/sudoers或者/etc/sudoers.d文件。

也可以看看

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

相關內容