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