2010-04-15 16 views
17

में सुरक्षा नीति को सुरक्षित रूप से कॉन्फ़िगर कैसे करें मैं उबंटू कर्मिक के लिए पैक किए गए टोमकैट 6.0.24 का उपयोग कर रहा हूं। उबंटू के टोमकैट पैकेज की डिफ़ॉल्ट सुरक्षा नीति बहुत कड़ी है, लेकिन सीधा दिखाई देती है। /var/lib/tomcat6/conf/policy.d में, ऐसी कई प्रकार की फ़ाइलें हैं जो डिफ़ॉल्ट नीति स्थापित करती हैं।टॉमकैट 6

शुरू में ध्यान देने योग्य बात वर्थ: - इसका आम lib निर्देशिका में कोई नया जार (एँ), कोई server.xml परिवर्तन, आदि लाना

  • मैं शेयर बिल्ला बिल्कुल स्थापित नहीं बदल दिया है। webapps निर्देशिका में युद्ध फ़ाइल केवल तैनाती की कार्रवाई है।
  • मैं जिस वेब एप्लिकेशन को तैनात कर रहा हूं, वह इस डिफ़ॉल्ट नीति के तहत हजारों पहुंच अस्वीकारों के साथ विफल रहता है (जैसा कि -Djava.security.debug="access,stack,failure" सिस्टम प्रॉपर्टी के लिए लॉग धन्यवाद की सूचना दी गई है)।
  • पूरी तरह से सुरक्षा प्रबंधक को बंद करने कोई त्रुटियों में परिणाम है, और उचित अनुप्रयोग कार्यक्षमता

मैं क्या करना चाहते हैं क्या policy.d निर्देशिका है, जो हो रहा है के लिए एक आवेदन विशेष सुरक्षा नीति फ़ाइल जोड़ने है अनुशंसित अभ्यास। मैं policy.d/100myapp.policy को यह जोड़ा (एक प्रारंभिक बिंदु के रूप में - मैं अंत में केवल क्या एप्लिकेशन वास्तव में जरूरत के लिए दी गई अनुमतियों को वापस ट्रिम करने के लिए चाहते हैं): सही codeBase घोषणा को खोजने के लिए प्रयास करने से चारों ओर ताड़ना

grant codeBase "file:${catalina.base}/webapps/ROOT.war" { 
    permission java.security.AllPermission; 
}; 

grant codeBase "file:${catalina.base}/webapps/ROOT/-" { 
    permission java.security.AllPermission; 
}; 

grant codeBase "file:${catalina.base}/webapps/ROOT/WEB-INF/-" { 
    permission java.security.AllPermission; 
}; 

grant codeBase "file:${catalina.base}/webapps/ROOT/WEB-INF/lib/-" { 
    permission java.security.AllPermission; 
}; 

grant codeBase "file:${catalina.base}/webapps/ROOT/WEB-INF/classes/-" { 
    permission java.security.AllPermission; 
}; 

नोट। मुझे लगता है कि यह मेरी मौलिक समस्या है।

वैसे भी, ऊपर लगभग काम करता है (वास्तव में केवल पहले दो अनुदान कोई असर दिखाई देते हैं): पहुँच खंडन के हजारों चले गए हैं, और मैं सिर्फ एक के साथ छोड़ दिया हूँ। प्रासंगिक स्टैक ट्रेस: ​​

java.security.AccessControlException: access denied (java.io.FilePermission /var/lib/tomcat6/webapps/ROOT/WEB-INF/classes/com/foo/some-file-here.txt read) 
    java.security.AccessControlContext.checkPermission(AccessControlContext.java:323) 
    java.security.AccessController.checkPermission(AccessController.java:546) 
    java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
    java.lang.SecurityManager.checkRead(SecurityManager.java:871) 
    java.io.File.exists(File.java:731) 
    org.apache.naming.resources.FileDirContext.file(FileDirContext.java:785) 
    org.apache.naming.resources.FileDirContext.lookup(FileDirContext.java:206) 
    org.apache.naming.resources.ProxyDirContext.lookup(ProxyDirContext.java:299) 
    org.apache.catalina.loader.WebappClassLoader.findResourceInternal(WebappClassLoader.java:1937) 
    org.apache.catalina.loader.WebappClassLoader.findResource(WebappClassLoader.java:973) 
    org.apache.catalina.loader.WebappClassLoader.getResource(WebappClassLoader.java:1108) 
    java.lang.ClassLoader.getResource(ClassLoader.java:973) 

मैं बहुत विश्वास है कि वास्तविक फ़ाइल है कि इनकार ट्रिगर अप्रासंगिक है हूँ - यह सिर्फ कुछ गुण फ़ाइल है कि हम वैकल्पिक कॉन्फ़िगरेशन पैरामीटर के लिए जाँच है। दिलचस्प बात यह है है कि:

  1. यह इस संदर्भ
  2. तथ्य यह है कि फ़ाइल मौजूद नहीं है की तुलना में java.io.File.exists() पूरी तरह गलत लौटने एक सुरक्षा अपवाद फेंक, बल्कि (हालांकि मुझे लगता है कि सिर्फ है समाप्त होता है में मौजूद नहीं है पढ़ने की अनुमति के अर्थशास्त्र का मामला)।

एक और वैकल्पिक हल (बस बिल्ला में सुरक्षा प्रबंधक को निष्क्रिय करने के अलावा) मेरी नीति फाइल करने के लिए एक ओपन एंडेड अनुमति जोड़ने के लिए है:

grant { 
    permission java.security.AllPermission; 
}; 

मुझे लगता है यह कार्यात्मक सुरक्षा प्रबंधक को बंद करने के बराबर है ।

मुझे लगता है कि मुझे अपने अनुदान में codeBase घोषणा को गलत तरीके से गलत होना चाहिए, लेकिन मैं इस समय इसे नहीं देख रहा हूं।

उत्तर

0

टोमकैट अपने ही टॉमकैट उपयोगकर्ता के साथ चलता है। युद्ध फ़ाइलों को उस उपयोगकर्ता को दिखाई देने की आवश्यकता है - शायद पहले जांच करने लायक है?

+0

हां, प्रश्न में सभी फाइलें (दोनों .war फाइलें और विस्फोटित ऐप निर्देशिका) का स्वामित्व tomcat6: tomcat6 है, वही उपयोगकर्ता जो टॉमकैट सर्वर के रूप में चलाया जाता है। – cemerick

0

क्या आप सीधे रूट निर्देशिका में तैनात हैं?

आमतौर पर जब आप वेबपैस फ़ोल्डर में युद्ध करते हैं, तो 100myapp.war कहें, यह 100myapp नामक फ़ोल्डर में अनपॅक करता है। रूट फ़ोल्डर के बजाय इस नए फ़ोल्डर पर अनुदान नहीं किया जाना चाहिए?

+0

सामान्य रूप से, हम अपने ऐप को 'ROOT.war' के रूप में तैनात कर रहे हैं, इसलिए इसे' रूट 'निर्देशिका में अनपॅक किया जाएगा। अगर इस मुद्दे का स्रोत था, तो मैंने आवश्यकतानुसार अनुदान को अपडेट करने के लिए किसी अन्य पथ ('foo.war') पर तैनाती का प्रयास किया है (' foo.war' और अनपॅक किया गया 'foo' निर्देशिका – cemerick

0

यह संभव है कि आपको फ़ाइल एक्सेस अनुमतियों को अलग से प्रदान करना होगा। करने के लिए अपने अनुप्रयोग के लिए अनुदान बदलने का प्रयास करें:

grant codeBase "file:${catalina.base}/webapps/ROOT.war" { 
    permission java.security.AllPermission; 
    permission java.io.FilePermission "file:${catalina.base}/webapps/ROOT/-", "read, write"; 
} 

यदि वह काम नहीं करता है, तो यह हो सकता है कि अपने मौजूदा अनुदान क्या कवर के बाहर कुछ कोड उन संपत्ति फ़ाइलों तक पहुँच रहा है (उदाहरण के लिए सर्वलेट या अन्य पुस्तकालय कोड) ।

समाधान के लिए, और यदि यह मामला है, तो आप यह है कि आप समस्या का कारण रहे हैं .properties पर एक सीधी अनुदान कर सकता पुष्टि करने के लिए:

grant { 
    permission java.io.FilePermission "file:${catalina.base}/webapps/ROOT/WEB-INF/classes/com/foo/some-file-here.txt", "read, write"; 
} 

यह तथ्य यह है कि बाद में हो सकता है लगता है चूंकि स्टैक ट्रेस टॉमकैट के संदर्भ लोडर में कोड दिखाता है। यदि .properties पर सीधे अनुदान काम करता है, तो आप अनुदान को org.apache.naming.resources.FileDirContext पर लॉक करना चाहेंगे।

क्या आपको अपने कोड के लिए विशिष्ट कोई स्टैक निशान मिलता है?

+0

क्षमा करें, कोई पासा नहीं: मेरे पास मौजूद सभी अनुदानों के लिए एक फ़ाइलप्रमिशन डब्ल्यू/"पढ़ना, लिखना" विकल्प जोड़ना कुछ भी नहीं बदला। हालांकि, मुझे लगता है कि उस सिद्धांत के लिए कुछ है: डिफ़ॉल्ट नीति फ़ाइल जो टोमकैट लोड करती है ('/ var/lib/tomcat6/work/catalina.policy' पर स्थित), पहले से ही उन कोडबेस के लिए अनुदान दिया गया है जो मैं उपयोग कर रहा था, लेकिन जिसमें ऑलप्रमिशन और फाइलप्रमिशन शामिल है। यह एक त्वरित परीक्षण के बावजूद दिखाता है कि पूर्व का तात्पर्य है उत्तरार्द्ध। दुर्भाग्यवश, विशिष्ट फ़ाइल पर कंबल अनुदान व्यवहार को नहीं बदला, और नहीं, मुझे हमारे कोडबेस से कोई स्टैक निशान नहीं दिखता है। – cemerick

2

क्या आप उबंटू के पैकेज-प्रबंधित संस्करण का उपयोग कर रहे हैं? हमने हाल ही में सुरक्षा सामान के साथ एक दुःस्वप्न किया था, लेकिन पाया कि टॉमकैट को अलग से डाउनलोड करके और इसका उपयोग करके, सुरक्षा समस्याएं चली गईं।

मंडन:

http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/

आप उबंटू चल रहा है और बिलाव सर्वलेट कंटेनर का उपयोग करना चाहते हैं, तो आप खजाने से संस्करण का उपयोग नहीं करना चाहिए यह सिर्फ सही ढंग से काम नहीं करता है। इसके बजाय आपको मैन्युअल स्थापना प्रक्रिया का उपयोग करने की आवश्यकता होगी जिसे मैं यहां रेखांकित कर रहा हूं।

+0

हमें कोई समस्या नहीं है इस सुरक्षा प्रबंधक मुद्दे के बाहर टोमकैट के साथ - किस तरह से यह आपके लिए "सही तरीके से काम नहीं करता" है? एफडब्ल्यूआईडब्ल्यू, लिंक किया गया आलेख ~ 3 साल पुराना है, और टिप्पणियां उबंटू 7.x का संदर्भ देती हैं। फिर भी, मैं एक मैनुअल एक शॉट स्थापित करूंगा और देखें कि क्या होता है। – cemerick

+0

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

+0

जिज्ञासा से आप अपने मैन्युअल इंस्टॉल के साथ कैसे गए? – Brian

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