我不得不为某人做一个肮脏的 Linux hack,以便他们可以cupsenable printername在作为非 root 用户时使用 shell 命令启动打印机。我不希望他们能够以cupsenableroot 身份使用整个语法,所以我只编写了一个 C 包装器来清理输入argv[1]并调用system("cupsenable sanitizedprintername").
我将程序 setuid 设为 root,但即便如此,cupsenable仍因“权限被拒绝”而失败。然后我在之前插入了一个setuid(0)电话system(),你瞧,它起作用了。
忽略有更好的方法让用户控制打印机的问题。可能有更好的方法。我感兴趣的是chmod u+svs. setuid(0)vs.的复杂性system()。为什么它会这样?