以root身份执行命令而不使用root密码或sudo

时间:2017-08-02 19:08:09

标签: c linux root setuid

我理解以root身份运行脚本的含义,尤其是Web应用程序。但是作为我的Web应用程序的一部分,我需要使用cur的tor,这需要偶尔重置tor ip。当使用ReturningAction重新启动服务时,tor可以获得新的ip。由于只有root可以做到这一点,我已经编写了一个C包装器脚本来完成我需要的工作,并编译它并在其上设置setuid root,并更改为root用户所有权。但是,当它作为非特权用户运行时,它仍然会询问root密码。作为root用户,服务重启不应该提供密码。

我的剧本:

service tor restart

我做了以下事情:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void ExecAsRoot (char* str);
int main ()
{
  setuid (0);
  setvbuf(stdout, NULL, _IONBF, 0);
  printf ("Host real ip is: ");
  ExecAsRoot("ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/'");
  ExecAsRoot("/usr/sbin/service tor restart");
  // sleep(2);
  printf ("Tor should have switched to a new ip by now.\nNew ip is: ");
  ExecAsRoot("torify curl ifconfig.co 2>/dev/null");
  return 0;
 }

void ExecAsRoot (char* str) {
  system (str);
}

输出:

chown root restartor
chmod u=rwx,go=xr restartor 

如何在不提供root密码的情况下将其作为Web用户运行?

1 个答案:

答案 0 :(得分:5)

您没有在文件权限中设置setuid位:

#-------v
chmod u=srwx,go=xr restartor