2017-08-02 52 views
5

Özellikle web uygulamasıyla bir betiğin root olarak çalışmasının sonuçlarını anlıyorum. Ancak web uygulamamın bir parçası olarak, kıvrımı tor ile kullanmam gerekiyor ve bu da ara sıra tor ipini sıfırlamaya ihtiyaç duyuyor. hizmet service tor restart ile yeniden başlatıldığında, yeni bir ip alabilir. Sadece root bunu yapabildiğinden, ihtiyacım olanı yapmak için bir C sarmalayıcı komut dosyası yazdım ve onu derledim ve setuid root'u ayarladım ve root kullanıcısı olarak değiştirdim. Ancak, imtiyazsız bir kullanıcı olarak çalıştırıldığında hala root şifresi soruyor. Kök olarak, bir hizmetin yeniden başlatılması şifre sormamalıdır.Kök olarak root root veya sudo olmadan komutları yürütme

Benim komut dosyası: Aşağıdaki yaptık

#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 

Çıktı: Ben kökünü besleyen olmadan bu web kullanıcı olarak çalıştırmak için nasıl alabilirim

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: 

parola?

cevap

5

Dosya izinleri setuid biti set vermedi:

#-------v 
chmod u=srwx,go=xr restartor 
İlgili konular