我正在尝试创建自己的 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