【问题标题】:setuid(0) gives EPERM on Mac OS X 10.9setuid(0) 在 Mac OS X 10.9 上提供 EPERM
【发布时间】:2013-11-01 15:21:25
【问题描述】:

执行时:

err = setuid(0);
if (err < 0) {
    fprintf(stderr, "return value: %d \n", err);
    fprintf(stderr, "error code: %d \n", errno);
 }

我得到这个输出:

return value: -1 
error code: 1 

错误代码 1 表示 EPERM 错误。关于我应该如何解决它的任何想法?

【问题讨论】:

    标签: macos launchd setuid


    【解决方案1】:

    你不能setuid()从非root用户变成root。

    如果您想以 root 身份运行应用程序,请使用 Authorization Services,如果是命令行工具,请使用 sudo

    【讨论】:

    • 它在低于 10.9 的情况下运行良好,10.9 中是否有任何特定的变化限制了它。
    【解决方案2】:

    SETUID(2) Man Pages

    如果用户不是超级用户,或者指定的uid不是超级用户 真实有效的 ID 或保存的 ID,这些函数返回 -1。

    setuid(0); 仅适用于 root(SU) 用户。

    错误代码:1

    #define EPERM       1       /* Operation not permitted */
    

    【讨论】:

      猜你喜欢
      • 2014-02-12
      • 1970-01-01
      • 2014-04-29
      • 2013-11-02
      • 2013-11-11
      • 2013-11-17
      • 2014-02-04
      • 2014-02-26
      相关资源
      最近更新 更多