2017-08-02 20 views
5

के बिना रूट के रूप में आदेश निष्पादित करें मैं विशेष रूप से एक वेब अनुप्रयोग द्वारा रूट के रूप में एक स्क्रिप्ट चलाने के प्रभाव को समझता हूं। हालांकि, मेरे वेब एप्लिकेशन के हिस्से के रूप में, मुझे टॉर के साथ कर्ल का उपयोग करने की आवश्यकता है और इसे कभी-कभी टोर आईपी को रीसेट करने की आवश्यकता होती है। जब सेवा service tor restart के साथ पुनरारंभ की जाती है तो टोर एक नया आईपी प्राप्त कर सकता है। चूंकि केवल रूट ही ऐसा कर सकता है, मैंने अपनी आवश्यकता के अनुसार एक सी रैपर स्क्रिप्ट लिखी है, और इसे संकलित किया है और उस पर सेटुइड रूट सेट किया है, और रूट उपयोगकर्ता स्वामित्व में बदल दिया है। हालांकि, यह अभी भी मुझे रूट पासवर्ड पूछता है जब यह एक अप्रतिबंधित उपयोगकर्ता के रूप में चलाया जाता है। रूट के रूप में, एक सेवा पुनरारंभ पासवर्ड से नहीं पूछना चाहिए।रूट पासवर्ड या सूडो

मेरे स्क्रिप्ट:

#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: 

मैं जड़ की आपूर्ति के बिना इस वेब उपयोगकर्ता के रूप में चलाने के लिए कैसे प्राप्त कर सकते हैं पारण शब्द?

उत्तर

5

आप फाइल अनुमति में setuid बिट सेट नहीं किया:

#-------v 
chmod u=srwx,go=xr restartor 
संबंधित मुद्दे