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