如何在 Mac 上使用 setuid 提升可执行文件的权限?

问题描述 投票:0回答:1

我想创建一个简单的脚本来重启 Mac。该命令需要 root 权限,所以我决定创建一个设置了 setuid 位且所有者为 root 的可执行文件。

为了测试 setuid 行为,C 文件:

#include<stdio.h>
#include<stdlib.h>

int main() {
    system("echo $UID");
    system("echo $EUID");
    system("sudo echo hello");
}

我已将可执行文件放在

/usr/local/bin
目录中。我在互联网上的某个地方读到,当
/
之前的所有目录都由 root 拥有时,Mac 只允许所有者 root 的 setuid 位。所以,我将我的可执行文件移到了这个目录中。

-rwsr-xr-x    1 root           wheel  33016 Apr  2 08:50 somethingsdfsdf

但是,可执行文件的输出是,

$ ./somethingsdfsdf
501
501
Password:
hello

如你所见,这不是root用户id,而是我的。有人知道我错过了什么吗?

c root elevated-privileges setuid
1个回答
0
投票

在 macOS 上,可执行文件上的

setuid
位仅当可执行文件位于 root 拥有的目录中(并且未打开供其他人写入)时才有效。层次结构中的所有目录也必须由 root 拥有。否则,出于安全原因,它会被忽略。

提升权限的最佳方法可能取决于您打算如何使用和执行此脚本。例如,如果它是一个计划任务,你可以使用启动守护进程。

© www.soinside.com 2019 - 2024. All rights reserved.