如何执行命令根 [英] how to execute a command as root

查看:109
本文介绍了如何执行命令根的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发在Linux(Debian的)一个C code。每隔一段时间,我需要通过来执行某些命令系统()

I develop a C code on Linux (Debian). Time to time, I need to execute some commands through system()

我不知道是否有可能通过来执行命令系统()为根。如果不是这种情况,是因为有根,我可以在C code?

I wonder if it is possible to execute a command via system()as root. If it is not the case, is there any function to execute a command (or run a binary) as root that I can use on the C code?

推荐答案

我们遇到了,以前我们想通过普通用户执行root命令的情况下,这里是我们的解决方案(使用的setuid / SUID):

We met the situation before that we want to execute a root command by a normal user, here is our solution (using setuid/SUID):

假设:


  • 用户名汤姆

  • gTom

  • C程序文件 my_pro.c

  • username: Tom
  • group: gTom
  • C program file: my_pro.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);
} 

步骤2:编译 my_sudo.c 获得 my_sudo 可执行文件

Step 2: Compile my_sudo.c to get a my_sudo executable file

   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 code

...
int main() {
    ...
    system("/usr/bin/mysudo yum install xxxxx");
    ...
}

#gcc && ls -l
#-rwxr--r--  1 Tom gTom 1895797 Jul 23 13:55 my_pro

步骤4:执行 ./ my_pro

您可以执行百胜安装没有须藤

这篇关于如何执行命令根的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆