在安装主根文件系统之前,我正在早期用户空间中的 init 脚本中运行一个程序。
是否可以在没有 root 权限的情况下运行应用程序?
明显的问题是,在启动过程的早期阶段没有“用户”。
答案1
是否可以在没有 root 权限的情况下运行应用程序?
就是这样。假设 Linux 已编译为支持 MULTIUSER ;)
明显的问题是,在启动过程的早期阶段没有“用户”。
嗯,是的,如果您尝试将su
或sudo
放在 initramfs 上,您将需要添加大量配置文件(/etc/passwd
、/etc/groups
等/etc/shadow
)。但这些复杂性并不是 Linux 所固有的。毕竟,UID 只是一个数字,因此如果您的目标是创建一个可以删除 root 权限的玩具程序,那是非常容易的:
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char** argv)
{
setuid(atoi(argv[1]));
execvp(argv[2], argv+2);
}
如果将其编译为toysu
,则可以这样调用:
toysu 1234 touch /tmp/example
其中1234
是要使用的 UID,其余的是要运行的命令。请注意,除非您一开始就是root,否则它不会工作,因此请在该命令前添加前缀以sudo
从正常系统进行测试。