में सुरक्षा नीति को सुरक्षित रूप से कॉन्फ़िगर कैसे करें मैं उबंटू कर्मिक के लिए पैक किए गए टोमकैट 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)
मैं बहुत विश्वास है कि वास्तविक फ़ाइल है कि इनकार ट्रिगर अप्रासंगिक है हूँ - यह सिर्फ कुछ गुण फ़ाइल है कि हम वैकल्पिक कॉन्फ़िगरेशन पैरामीटर के लिए जाँच है। दिलचस्प बात यह है है कि:
- यह इस संदर्भ
- तथ्य यह है कि फ़ाइल मौजूद नहीं है की तुलना में
java.io.File.exists()
पूरी तरह गलत लौटने एक सुरक्षा अपवाद फेंक, बल्कि (हालांकि मुझे लगता है कि सिर्फ है समाप्त होता है में मौजूद नहीं है पढ़ने की अनुमति के अर्थशास्त्र का मामला)।
एक और वैकल्पिक हल (बस बिल्ला में सुरक्षा प्रबंधक को निष्क्रिय करने के अलावा) मेरी नीति फाइल करने के लिए एक ओपन एंडेड अनुमति जोड़ने के लिए है:
grant {
permission java.security.AllPermission;
};
मुझे लगता है यह कार्यात्मक सुरक्षा प्रबंधक को बंद करने के बराबर है ।
मुझे लगता है कि मुझे अपने अनुदान में codeBase
घोषणा को गलत तरीके से गलत होना चाहिए, लेकिन मैं इस समय इसे नहीं देख रहा हूं।
हां, प्रश्न में सभी फाइलें (दोनों .war फाइलें और विस्फोटित ऐप निर्देशिका) का स्वामित्व tomcat6: tomcat6 है, वही उपयोगकर्ता जो टॉमकैट सर्वर के रूप में चलाया जाता है। – cemerick