2011-04-02 7 views
6

ऐसा लगता है कि मुझे SUID बिट के अर्थशास्त्र को समझने में कुछ परेशानी है, शायद कोई मुझे स्थिति को स्पष्ट करने में मदद कर सकता है।एसयूआईडी (सेट-यूजर आईडी)

SUID बिट के अर्थशास्त्र की मेरी समझ निम्नानुसार है: जब मैं एक फ़ाइल के साथ SUID बिट सेट करता हूं, तो फ़ाइल फ़ाइल के मालिक के रूप में निष्पादित की जाएगी, न कि फ़ाइल के कॉलर के रूप में। तो इस व्यवहार का परीक्षण करने के मैं निम्नलिखित अजगर पटकथा लिखी:

#!/usr/bin/python3 -O 

import os 

def main(): 
     print('Real UserID: %d' % os.getuid()) 
     print('Effective UserID: %d' % os.geteuid()) 

if __name__ == '__main__': 
     main() 

है कि मैं इसी समूह "testuser" के साथ "testuser" नाम और फाइल अनुमति समायोजित एक उपयोगकर्ता बनाया के बाद (chown testuser फ़ाइल, chgrp testuser फ़ाइल, chmod u + s, g + x फ़ाइल)। इसके बाद मैंने अपना मुख्य उपयोगकर्ता "testuser" समूह में जोड़ा ताकि मैं समूह के सदस्य के रूप में फ़ाइल निष्पादित कर सकूं। सब के बाद कि फाइल अनुमति इस तरह देखा:

-rwsr-xr-- 1 testuser testuser 168 2011-04-02 13:35 procred.py* 

तो जब मैं testuser के रूप में प्रवेश कर रहा हूँ स्क्रिप्ट उत्पादन का उत्पादन:

Real UserID: 1001 
Effective UserID: 1001 

... और जब मैं अपने मुख्य रूप स्क्रिप्ट चलाने उपयोगकर्ता स्क्रिप्ट आउटपुट:

Real UserID: 1000 
Effective UserID: 1000 

अब मेरी समझ के रूप में स्क्रिप्ट uid 1001 उत्तरार्द्ध निष्पादन में (फ़ाइल के मालिक) के साथ उपयोगकर्ता के रूप में चलाने चाहिए था। क्या मुझे पूरी अवधारणा गलत हो रही है या मेरी गलती कहां है?

उत्तर

8

* .py फ़ाइल पर SUID बिट सेट करना किसी भी तरह से मदद नहीं करता है क्योंकि स्क्रिप्ट पाइथन दुभाषिया द्वारा निष्पादित की जाती है जिसे इस मामले में SUID सेट किया जाना चाहिए। 'सुडो' का उपयोग करना आपका बेहतर मित्र है।

4

एसयूआईडी सेट करना स्क्रिप्ट के लिए काम नहीं करता है, क्योंकि कर्नेल # देखता है! (शेबैंग - जादू संख्या 0x23 0x21 - मैन जादू) और स्क्रिप्ट के साथ दुभाषिया/usr/bin/पायथन को इनपुट के रूप में कॉल करने से पहले विशेषाधिकारों को छोड़ देता है। एसआईआईडी बिट सेट होने पर, स्क्रिप्ट निष्पादित करने से पहले स्क्रिप्ट को निष्पादित करने से पहले स्क्रिप्ट के मालिक के पास विशेषाधिकार बदलने के लिए पाइथन दुभाषिया SUID रूट स्थापित करने के लिए एक तरीका है और स्क्रिप्ट को बदलने के लिए कार्यक्षमता जोड़ें। एक बेवकूफ तरीके से ऐसा करने से सुरक्षा समस्याएं लागू होंगी। कैसे एक स्मार्ट तरीके से करने के लिए यहां पाया जा सकता: http://perldoc.perl.org/perlsec.html

अतिरिक्त लिंक:

0

मैं वेब में इस link पाया। आप इस रैपर में SUID सेट कर सकते हैं और इसका उपयोग कर सकते हैं। लेकिन व्यक्तिगत रूप से सूडो समाधान पसंद करते हैं। ;)