2009-02-20 7 views
12

हमारे आईटी समूह के लिए उत्पादन परिवर्तन कार्यान्वयनकर्ताओं को हमारे समूह में सभी विभिन्न वस्तुओं के लिए सुरक्षा की समीक्षा करने का काम सौंपा गया है, मुख्य रूप से यह सुनिश्चित करने के लिए कि जो लोग शेष हैं हमारे नियोक्ता या अन्य समूहों में स्थानांतरित करने के लिए अब हमारे सर्वर शेयर, वेब निर्देशिका, एसक्यूएल डेटाबेस इत्यादि तक पहुंच नहीं है। हमने हाल ही में एसक्यूएल भाग पूरा किया है और हमारे पास एक पुनः उपयोग करने योग्य स्क्रिप्ट है जिसे सालाना चलाया जा सकता है (या जो भी आवृत्ति पर हम साथ आते हैं)। यह बहुत अच्छा काम करता है और हमने कुछ मिनटों के साथ 10 या तो सर्वरों में 20 डेटाबेस का ऑडिट किया।सर्वर और मैप किए गए ड्राइव के लिए एसीएल की सूची प्राप्त करने के लिए सी # का उपयोग करना

अब, सर्वर सामग्री के लिए। मेरे पास एक ऐसा एप्लीकेशन है जिसे मैंने सी # में .NET 2.0 का उपयोग करके लिखा था जो निर्देशिकाओं की सूची को फिर से स्कैन करेगा और एसीएल को टेक्स्ट फ़ाइल में डंप करेगा। यह उत्कृष्ट काम करता है। स्थानीय मशीन पर। यूएनसी और मैप किए गए पथ काम नहीं करते हैं, मुझे निम्नलिखित अपवाद संदेश मिलता है: इस प्रक्रिया के लिए प्रक्रिया में 'सेस्क्योरिटीप्रिलेज' विशेषाधिकार नहीं है।

इस लाइन पर:

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All); 

कहाँ di एक DirectoryInfo वस्तु एक DirectoryInfo [] सरणी से प्रगणित है।

हम संभवतः SeSecurityPrivilege विशेषाधिकार प्रदान करने में सक्षम होने की संभावना नहीं है। हालांकि मुझे नहीं लगता कि यह आवश्यक होना चाहिए। मैं फ़ोल्डर खोल सकता हूं और गुणों के लिए राइट क्लिक कर सकता हूं और सुरक्षा टैब पर क्लिक कर इसे जीयूआई में देख सकता हूं। मैं प्रोग्रामेटिक रूप से इसे एक्सेस करने में सक्षम होना चाहिए।

लक्षित फ़ोल्डर के लिए अनुमति प्राप्त करने के लिए मैं कोड के इस अनुभाग को कैसे बदल सकता हूं इस पर कोई विचार?

private void CheckSecurity(DirectoryInfo[] DIArray) 
{ 
    foreach (DirectoryInfo di in DIArray) 
    { 
     DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All); 
     string sAccessInfo = string.Empty; 

     foreach (FileSystemAccessRule FSAR in DirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) 
     { 
      sAccessInfo += GetAceInformation(FSAR); 
     } 

     if (sAccessInfo != string.Empty) 
     { 
      // Write info to text file 
     } 
    } 
} 

private string GetAceInformation(FileSystemAccessRule ace) 
{ 
    StringBuilder info = new StringBuilder(); 
    string line = string.Format("Account: {0}", ace.IdentityReference.Value); 
    info.AppendLine(line); 
    line = string.Format("Type: {0}", ace.AccessControlType); 
    info.AppendLine(line); 
    line = string.Format("Rights: {0}", ace.FileSystemRights); 
    info.AppendLine(line); 
    line = string.Format("Inherited ACE: {0}", ace.IsInherited); 
    info.AppendLine(line); 
    return info.ToString(); 
} 

संपादित करें: मैं कैसे एसीएल में पढ़ने attrib के लिए दूरदराज के फ़ोल्डर की जाँच करेगा जब यह रूट फ़ोल्डर के लिए "GetAccessControl()" विधि प्राप्त करने पर विफल रहता है? (यदि मैं \ server \ path में जाता हूं, तो यह \ server \ path के लिए जानकारी प्राप्त करने में त्रुटियों)।

उपयोगकर्ता खाता एक डोमेन खाता है और मुझे फ़ाइल संरचना को पढ़ने की अनुमति है। मैं फ़ोल्डर/फ़ाइलों के गुणों से सुरक्षा देख सकता हूं।

मैं प्रक्रिया मॉनीटर की जांच करूंगा लेकिन मुझे यकीन नहीं है कि मैं इसे सर्वर पर चलाने में सक्षम होने जा रहा हूं (मैं प्रश्न में सर्वर पर व्यवस्थापक नहीं हूं)।

+1

यह सवाल/कोड नमूना वास्तव में काफी मददगार था हो रही बंद कर देना चाहिए। मैंने इस कोड का उपयोग हमारे आंतरिक सिस्टम में से एक के लिए फ़ाइल अनुमति मॉनीटर का निर्माण किया। –

उत्तर

17

आपको 'ऑडिटिंग' टैब की वजह से त्रुटि मिल रही है, हालांकि मुझे यकीन है कि आप वास्तव में स्क्रीन पर एक्सेस करना चाहते हैं, 'अनुमतियाँ' टैब पर डेटा है। SeSecurityPrivilege एसएसीएल तक पहुंच नियंत्रित करता है।

कोशिश बदलते

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All); 

को

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.Access); 

तो आप त्रुटि

+0

दुह! मुझे नहीं पता कि मैंने उन अन्य गणनाओं को और क्यों नहीं देखा। मैं कल यह कोशिश करूंगा और देख सकता हूं कि मुझे क्या मिलता है। धन्यवाद! – bdwakefield

+0

यह चाल है, धन्यवाद! – bdwakefield

+0

अच्छा, मैं थोड़ा चिंतित था क्योंकि मुझे खुद त्रुटि नहीं मिली ... – uzbones

1

जांचें कि रिमोट फ़ोल्डर उपयोगकर्ता को कोड चलाने वाले अनुदान देता है एसीएल में गुण पढ़ें।

यह भी याद रखें कि अनुमतियों को दूरस्थ (सर्वर) मशीनों पर हल किया गया है, इसलिए स्थानीय समूह (उपयोगकर्ता और व्यवस्थापक) सदस्यता में ग्राहक पर चल रहे उपयोगकर्ता खाते को शामिल नहीं किया जा सकता है।

सर्वर पर Process Monitor चल होने (फ़ोल्डर के लिए फ़िल्टर/प्रश्न में फ़ाइलें) क्यों यह विफल हो रहा है के विवरण को हल करने में मदद कर सकते हैं।

+0

संपादन में उपरोक्त नोट देखें। – bdwakefield

+0

हमम ... व्यवस्थापक अधिकारों के बिना आप अजीब अनुमतियों की दया पर होंगे और/या डिबगिंग को बहुत मुश्किल लगेंगे। – Richard

संबंधित मुद्दे

 संबंधित मुद्दे