Выполнять команды как root без пароля root или sudo

Я понимаю последствия запуска сценария от имени пользователя root, особенно в веб-приложении. Однако, как часть моего веб-приложения, мне нужно использовать curl с tor, и для этого нужно время от времени сбрасывать tor ip. tor может получить новый ip при перезапуске сервиса с service tor restart. Поскольку это может сделать только root, я написал сценарий-оболочку C, чтобы делать то, что мне нужно, скомпилировал его, установил для него setuid root и перешел на пользователя root. Тем не менее, он по-прежнему запрашивает у меня пароль root, когда он запускается как непривилегированный пользователь. Как root, перезапуск службы не должен запрашивать пароль.

Мой сценарий:

#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 

Выход:

Host real ip is: 7.17.11.23
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'tor.service'.
Authenticating as: root
Password:

Как я могу заставить это работать как веб-пользователь без предоставления пароля root?


person Joel G Mathew    schedule 02.08.2017    source источник


Ответы (1)


Вы не установили бит setuid в правах доступа к файлу:

#-------v
chmod u=srwx,go=xr restartor
person dbush    schedule 02.08.2017