当前位置: 首页 > 面试题库 >

如何以root身份执行命令

黄淇
2023-03-14
问题内容

我在Linux(Debian)上开发了C代码。有时,我需要通过执行一些命令system()

我想知道是否可以通过system()root用户执行命令。如果不是这种情况,是否有任何功能可以我在C代码上以root身份执行命令(或运行二进制文件)?


问题答案:

在遇到普通用户要执行root命令之前,我们遇到了这种情况,这是我们的解决方案(使用setuid / SUID):

假使,假设:

  • 用户名Tom
  • 组别gTom
  • C程序文件my_pro.c

步骤1:编写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);
}

步骤2:编译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

步骤4:执行./my_pro

您可以执行yum installno sudo



 类似资料:
  • 我最近开始使用Jenkins进行集成。在没有shell命令的情况下在主节点上运行作业之前,一切都很好,但我必须在主节点和从节点上运行作业,从节点包含要运行的shell命令。我无法以root用户身份运行这些shell命令。我试过了 使用 在shell命令中设置用户名 使用 每次使用上述任何一种方法时,我都会遇到错误。

  • 问题内容: 我最近开始使用Jenkins进行集成。一切都很好,直到我在没有shell命令的情况下在主节点上运行作业,但是我必须在包含shell命令的主节点和从属节点上运行作业。我无法以root用户身份运行这些Shell命令。我努力了 使用。 在shell命令中设置用户名。 使用。 我得到我每次使用任何上述方法时错误。 问题答案: 您需要修改用户的权限,以便您可以运行shell命令。您可以将jenk

  • 问题内容: 我正在设置最小的chroot,并希望避免在其中包含sudo或su,但仍以非root用户身份运行我的进程。当运行chroot要求root时,这有点技巧。我可以编写一个执行以下操作的程序: 这是我最好的选择吗?或者是否有标准工具可以为我做到? 问题答案: 如果从超级用户调用,该选项将在非超级用户UID / GID下运行命令。 顺便说一句,选项’–userspec’首先是根据git仓库在co

  • 我使用Ansible安装了Nginx。要在Centos7上安装,我使用了yum软件包,因此默认情况下它是以root用户身份运行的。我希望它在Centos中以不同的用户(前nginx用户)身份启动和运行。当我尝试与其他用户一起运行时,会出现以下错误: nginx的工作。服务失败,因为控制进程已退出,错误代码为。有关详细信息,请参阅“systemctl status nginx.service”和“j

  • 问题内容: 我正在使用Python在系统级别的Linux中进行项目。因此,我想知道,如果我以普通用户身份运行代码,并且正在访问系统文件,那么它应该具有root权限,那么我如何提示输入root密码并以超级用户身份运行其他代码。我想知道,如何以超级用户身份以密码提示运行python脚本。 任何帮助将不胜感激。先感谢您.. 问题答案: 您可以做的另一件事是,如果脚本不是以root身份执行的,则脚本会自动

  • 问题内容: 简而言之… 首先,为什么npm建议仅以非root用户身份运行它?我不相信高,每一个其他的包管理器(,,,)是错误的,需要sudo的。 其次,当我遵循他们的建议(并以非超级用户身份运行)时,它将不起作用(因为非超级用户没有对/ usr / local / lib的许可)。我如何遵循他们的建议?我不会去,因为这对我来说似乎是个坏主意。 详细描述… 我通过(自述文件中的说明)安装了npm。