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



我想创建一个简单的脚本来重新启动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目录下。我在网上读到Mac只允许所有者根的setuid位,当所有的目录直到/是由根拥有。所以,我把我的可执行文件移到了这个目录下。

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

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

$ ./somethingsdfsdf
501
501
Password:
hello

可以看到,它不是根用户id,而是我的。有人知道我错过了什么吗?

在macOS上,可执行文件上的setuid位只有当可执行文件位于root所有的目录(并且不允许其他人打开以写入)时才有效。层次结构中的所有目录也必须为root所有。否则,出于安全考虑,将忽略它。

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

相关内容

  • 没有找到相关文章

最新更新