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