c - 如何以root身份执行命令

标签 c linux root

我在 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/

相关文章:

c - 使用 C/CGI 管理 session

c - C 的新手,使用目录 : Trouble opening files within subdirectories

linux - 文件名末尾的 "~"字符表示什么(linux)

linux - su 命令上的 "basename: missing operand"

c - 使用 arm-gcc 3.3.1 在 32 位 pic 上循环

c - Visual Studio : Create a Hello World app in C?

Windows 上的 Linux 容器 (LCOW) 功能与在 Windows 上运行 Linux VM

linux - 是否可以在应用程序之间共享 Cuda 上下文?

python - 使其他非 root 用户可以访问以 root 身份安装的 python 库

docker - 以 root 以外的用户身份连接到 docker 容器