我正在嘗試建立自己的 PID 1 初始化腳本,以便使用 init=/myscript 從啟動命令列呼叫。我怎麼能讓它在任何核心的真實檔案系統上工作?
當它在 initrd 中運行時,它工作正常並且可以掛載東西等 - 但是當我在沒有 initrd 的檔案系統上使用它時,它無法掛載東西,因為:
mount: only root can do that (effective UID is 1000)
當我 strace 任何失敗的命令時,它不可避免地會發出 geteuid32() 並返回 1000。我怎樣才能以 euid 0 身份運行?
答案1
init
on沒有特殊處理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