yar*_*oze 4 unix permissions chmod macos
我试图让 C 程序始终以 root 身份运行,无论是谁调用它。基本上,我希望它以调用“mkdir /test”为例。所以我创建了 C 程序如下:
#include <stdio.h>
int main()
{
system("mkdir /test");
printf("bye...\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,我刚刚编译它:gcc test.c -o test
现在我尝试设置权限:
chmod +s test
Run Code Online (Sandbox Code Playgroud)
但是,以普通用户身份运行它时,出现权限被拒绝错误。因此,它执行文件但不具有 root 权限。我还尝试将权限设置为:
chmod a+s test
chmod o+s test
Run Code Online (Sandbox Code Playgroud)
但我总是遇到同样的问题。
任何人都可以帮助我吗?顺便说一下,文件 test.c 是由 root 创建的,它也被编译为 root。
bash-3.2# ls -al | grep test
-rwxr-xr-x 1 root staff 8796 5 Ago 19:07 test
bash-3.2# chmod +s test
bash-3.2# ls -al | grep test
-rwsr-sr-x 1 root staff 8796 5 Ago 19:07 test
bash-3.2# whoami
root
bash-3.2#
Run Code Online (Sandbox Code Playgroud)
提前致谢!干杯!
slh*_*hck 11
这里有两件事需要了解:
setuid
允许程序以其所有者权限运行的标志。似乎是 OS X 中的一个限制,显然没有记录,是可执行文件上的 setuid 位只有在可执行文件位于 root 拥有的目录中时才有效(并且不开放供其他人写入),等等,直到根目录。否则,出于安全原因,它会被忽略。
无论如何,您可以修改 sudoers 文件,这样一个命令就不需要密码。请记住,您必须使用visudo
来编辑它。如果您在编辑文件时设法弄错了语法,您将根本无法运行sudo
。
sudo visudo
Run Code Online (Sandbox Code Playgroud)
然后,按I,并在底部插入:
username ALL= NOPASSWD: /path/to/command
Run Code Online (Sandbox Code Playgroud)
在这里,您显然需要更改username
应该运行命令而无需输入密码的用户。此外,更改可执行文件的路径。请注意,此时,可执行文件只能由其拥有root
并具有执行权限root
。
按Esc,然后写:wq
,然后Enter。
现在,用户username
可以运行命令sudo /path/to/command
并且不需要输入密码来执行此操作。
归档时间: |
|
查看次数: |
7960 次 |
最近记录: |