Выполнять команды как 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?

1 ответ

Решение

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

#-------v
chmod u=srwx,go=xr restartor
Другие вопросы по тегам