我在 Linux (Debian) 上开发 C 代码。有时,我需要通过 system()
我想知道是否可以通过 system()
以 root 身份执行命令。如果不是这种情况,是否有任何函数可以以 root 身份执行命令(或运行二进制文件),我可以在 C 代码上使用?
最佳答案
我们之前遇到过想通过普通用户执行root命令的情况,这里是我们的解决方案(使用setuid/SUID):
假设:
- 用户名:
汤姆
- 组:
gTom
- C程序文件:
my_pro.c
第一步:编写C代码工具:my_sudo.c
...
int main(int args, char *argv[]) {
if (args < 2)
printf("Usage: my_sudo [cmd] [arg1 arg2 ...]");
// cmd here is the shell cmd that you want execute in "my_pro"
// you can check the shell cmd privilege here
// example: if (argv[1] != "yum") return; we just allow yum execute here
char cmd[MAX_CMD];
int i;
for ( i = 2; i < args; i ++) {
// concatenate the cmd, example: "yum install xxxxx"
strcat(cmd, " ");
strcat(cmd, argv[i]);
}
system(cmd);
}
第二步:编译my_sudo.c
得到my_sudo
可执行文件
sudo chown root:gTom my_sudo // user root && gTom group
sudo chmod 4550 my_sudo // use SUID to get root privilege
#you will see my_sudo like this(ls -l)
#-r-sr-x--- 1 root my_sudo 9028 Jul 19 10:09 my_sudo*
#assume we put my_sudo to /usr/sbin/my_sudo
第 3 步:在您的 C 代码中
...
int main() {
...
system("/usr/bin/mysudo yum install xxxxx");
...
}
#gcc && ls -l
#-rwxr--r-- 1 Tom gTom 1895797 Jul 23 13:55 my_pro
第四步:执行./my_pro
您可以在没有 sudo
的情况下执行 yum install
。
关于c - 如何以root身份执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822599/