2017-08-02 64 views
5

Rozumiem konsekwencje uruchamiania skryptu jako root, szczególnie przez aplikację internetową. Jednak jako część mojej aplikacji internetowej, muszę użyć curl z tor i to wymaga resetowania od czasu do czasu. tor może uzyskać nowy adres IP, gdy usługa zostanie ponownie uruchomiona za pomocą service tor restart. Ponieważ tylko root może to zrobić, napisałem skrypt C wrapper, aby zrobić to, czego potrzebuję, skompilowałem go i ustawiłem na nim root setuid i zmieniłem na właściciela użytkownika root. Jednak nadal prosi mnie o hasło roota, gdy jest uruchamiane jako nieuprzywilejowany użytkownik. Jako root, ponowne uruchomienie usługi nie powinno wymagać hasła.Wykonywanie poleceń jako root bez hasła root lub sudo

Mój skrypt:

#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); 
} 

robiłem co następuje:

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

wyjściowa:

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: 

Jak mogę to uruchomić jako użytkownik internetowej bez podawania korzeń hasło?

Odpowiedz

5

Nie ustawiony bit setuid w uprawnieniach plików:

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