2008-10-24 13 views
8

मेरे पास एक एएसपी.NET एप्लिकेशन है। मूल रूप से वितरण प्रक्रिया इस एक है:नेंट: फ़ाइल अनुमति बदलें

  • Nant आवेदन बनाता है और SVN फोल्डर और बेकार फ़ाइलों के बिना आवेदन फाइलों के साथ डेवलपर के कंप्यूटर पर एक ज़िप फ़ाइल बनाता है। यह फ़ाइल एक नेंट स्क्रिप्ट के साथ वितरित की जाती है।
  • ज़िप और नैन फ़ाइलों को क्लाइंट के कंप्यूटर पर कॉपी किया गया है
  • नेंट स्क्रिप्ट वर्तमान वेबसाइट फ़ाइलों को ज़िप फ़ाइल में निहित फ़ाइल के साथ बदल देता है।

मेरी समस्या यह है कि इस प्रक्रिया के साथ जब मैं वेबसाइट खोलने का प्रयास करता हूं तो मेरे पास अनधिकृत पहुंच त्रुटि होती है। ऐसा लगता है कि फ़ाइलों को उपयोगकर्ता के लिए अनुमति सेट होना आवश्यक है "IIS_WPG"।

मेरे पास आईआईएस कॉन्फ़िगरेशन बदलने की शक्ति नहीं है इसलिए मुझे प्रत्येक फ़ाइल की अनुमतियों को मैन्युअल रूप से बदलना होगा। और हर बार जब मैं फ़ाइलों को प्रतिस्थापित करता हूं तो अनुमतियां हटा दी जाती हैं और मुझे उन्हें फिर से सेट करने की आवश्यकता होती है।

  • मैं Nant के साथ फ़ाइलें अनुमतियों को परिवर्तित कर सकते हैं:

    तो मैं दो प्रश्न हैं? यह कैसे करना है ?

  • क्या इस समस्या से बचना संभव है? (डेवलपर्स के पास इस उपयोगकर्ता को उनके कंप्यूटर पर नहीं है)

उत्तर

4

आपको फ़ाइलों और फ़ोल्डर्स को अनुमति देने के लिए विंडोज़ में सीएसीएलएस प्रोग्राम चलाने की आवश्यकता है। नंत से, आप इसे EXEC कार्य के साथ कर सकते हैं।

की तरह एक टैग ब्लॉक का प्रयास करें:

<exec program="cacls"> 
    <arg value="*" /> 
    <arg value="/G IIS_WPG:F" /> 
</exec> 
+0

बस ध्यान दें कि आपका सुझाव सही समाधान है लेकिन पैरामीटर ... खतरनाक हैं :)। मेरा जवाब देखें –

7

@Jeff फ्रिट्ज आउच ... आपके सुझाव सही समाधान है, लेकिन मानकों रहे हैं ... खतरनाक :)।

देव कंप्यूटर पर मैं व्यवस्थापक के रूप में लॉग इन हूं और मैंने cmd के साथ आपके सुझाव की कोशिश की।

  • यह सभी अनुमतियाँ केवल लोगों को आदेश में परिभाषित सेट करने के लिए सेट की जगह (हां, तो आदेश के बाद, तक पहुँचने फ़ाइलों को एक के परिणामस्वरूप "प्रवेश निषेध" यहां तक ​​कि मेरी व्यवस्थापक उपयोगकर्ता के साथ)
  • यह लागू किया सी: \ विन्डोज़ \ निर्देशिका पर, जबकि मैंने wwwroot फ़ोल्डर से कमांड को बुलाया।:)

तो, कुछ परीक्षणों के बाद, सही आदेश है:

cacls [full folder path] /T /E /G IIS_WPG:F 
  • /टी: निर्दिष्ट फ़ोल्डर और सबफ़ोल्डर पर लागू होता है
  • /ई: संपादन एसीएल के बजाय को बदलकर :)
+1

अद्यतन: सीएसीएलएस अब बहिष्कृत है और इसके बजाय आईसीएसीएलएस का उपयोग किया जाना चाहिए। कम से कम विंडोज सर्वर 2008 आर 2 पर यह मामला है। – JulianM

3

हमने अपना कार्य लिखना समाप्त कर दिया या यह काफी कुछ सीधे आगे कोड के साथ:

<loadtasks> 
    <fileset> 
     <include name="MyTask.dll"/> 
    </fileset> 
</loadtasks> 

<addusertodir dir="MyDir" user="IIS_WPG"/> 

जाहिर है, यह आपके कुछ नियम या आप के लिए संशोधित किया जा सकता है:

[TaskName("addusertodir")] 
public class AddUserToDirectorySecurity : Task 
{ 
    [TaskAttribute("dir", Required=true)] 
    public string DirPath { get; set; } 

    [TaskAttribute("user", Required=true)] 
    public string UserName { get; set; } 

    protected override void ExecuteTask() 
    { 
     FileSystemAccessRule theRule1 = new FileSystemAccessRule(UserName, FileSystemRights.ListDirectory, AccessControlType.Allow); 
     FileSystemAccessRule theRule2 = new FileSystemAccessRule(UserName, FileSystemRights.ReadAndExecute, AccessControlType.Allow); 
     FileSystemAccessRule theRule3 = new FileSystemAccessRule(UserName, FileSystemRights.Read, AccessControlType.Allow); 

     DirectorySecurity theDirSecurity = new DirectorySecurity(); 
     theDirSecurity.AddAccessRule(theRule1); 
     theDirSecurity.AddAccessRule(theRule2); 
     theDirSecurity.AddAccessRule(theRule3); 
     Directory.SetAccessControl(DirPath, theDirSecurity); 
    } 
} 

तो फिर तुम एक nant स्क्रिप्ट कि कस्टम कार्य लोड करता है और कार्यान्वित लिख सकते हैं यदि आप चाहें तो कार्य में इसे पैरामीटर भी कर सकते हैं। हमने इसे निष्पादन कार्य का उपयोग करने पर प्राथमिकता दी क्योंकि यह हमारे द्वारा लागू किए जा रहे अनुमतियों पर थोड़ा अधिक नियंत्रण रखता है।

2

सीएसीएलएस अब बहिष्कृत है। यहां एक संस्करण है जो प्रतिस्थापन आईसीएसीएलएस का उपयोग करता है।

  • हमारे स्थापना के रूट फ़ोल्डर है "c:: \ inetpub \ wwwroot"

    चलो कहते हैं कि हमारे पास निम्नलिखित हैं, और यह NANT चर ${paths.myprogram.inetpub}

  • फ़ोल्डर हम संशोधित करना चाहते हैं में संग्रह किया गया है , "अपलोड" कहा जाता है, और अनुमतियाँ "संशोधित" के लिए यह ${upload.foldername}
  • उपयोगकर्ता हम "IIS_UPLOAD_USER" है को पहुंच प्रदान करना चाहते हैं, ${iis.upload.user}
  • अनुमति स्तर हम देना चाहते है "एम" में संग्रहीत में संग्रह किया गया है ,में संग्रहीत
इन मान्यताओं के साथ

, हमारे कार्य यह है:

<exec program="icacls"> 
    <arg value="${path::combine(paths.myprogram.inetpub, upload.foldername)}" /> 
    <arg value="/grant" /> 
    <arg value="${iis.upload.user}:${iis.user.permissionlevel}" /> 
</exec> 

आशा इस मदद करता है!

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