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?