Minimalistisches CATALINA_BASE
ulrich@undisclosed
2020-04-18 3182cf7d4cbc6f2988cfdcad3e2efd73aed316bb
commit | author | age
0ed8f6 1 // Licensed to the Apache Software Foundation (ASF) under one or more
U 2 // contributor license agreements.  See the NOTICE file distributed with
3 // this work for additional information regarding copyright ownership.
4 // The ASF licenses this file to You under the Apache License, Version 2.0
5 // (the "License"); you may not use this file except in compliance with
6 // the License.  You may obtain a copy of the License at
7 //
8 //     http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15
16 // ============================================================================
17 // catalina.policy - Security Policy Permissions for Tomcat
18 //
19 // This file contains a default set of security policies to be enforced (by the
20 // JVM) when Catalina is executed with the "-security" option.  In addition
21 // to the permissions granted here, the following additional permissions are
22 // granted to each web application:
23 //
24 // * Read access to the web application's document root directory
25 // * Read, write and delete access to the web application's working directory
26 // ============================================================================
27
28
29 // ========== SYSTEM CODE PERMISSIONS =========================================
30
31
32 // These permissions apply to javac
33 grant codeBase "file:${java.home}/lib/-" {
34         permission java.security.AllPermission;
35 };
36
37 // These permissions apply to all shared system extensions
38 grant codeBase "file:${java.home}/jre/lib/ext/-" {
39         permission java.security.AllPermission;
40 };
41
42 // These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre
43 grant codeBase "file:${java.home}/../lib/-" {
44         permission java.security.AllPermission;
45 };
46
47 // These permissions apply to all shared system extensions when
48 // ${java.home} points at $JAVA_HOME/jre
49 grant codeBase "file:${java.home}/lib/ext/-" {
50         permission java.security.AllPermission;
51 };
52
53
54 // ========== CATALINA CODE PERMISSIONS =======================================
55
56
57 // These permissions apply to the daemon code
58 grant codeBase "file:${catalina.home}/bin/commons-daemon.jar" {
59         permission java.security.AllPermission;
60 };
61
62 // These permissions apply to the logging API
63 // Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home},
64 // update this section accordingly.
65 //  grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..}
66 grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
67         permission java.io.FilePermission
68          "${java.home}${file.separator}lib${file.separator}logging.properties", "read";
69
70         permission java.io.FilePermission
71          "${catalina.base}${file.separator}conf${file.separator}logging.properties", "read";
72         permission java.io.FilePermission
73          "${catalina.base}${file.separator}logs", "read, write";
74         permission java.io.FilePermission
75          "${catalina.base}${file.separator}logs${file.separator}*", "read, write, delete";
76
77         permission java.lang.RuntimePermission "shutdownHooks";
78         permission java.lang.RuntimePermission "getClassLoader";
79         permission java.lang.RuntimePermission "setContextClassLoader";
80
81         permission java.lang.management.ManagementPermission "monitor";
82
83         permission java.util.logging.LoggingPermission "control";
84
85         permission java.util.PropertyPermission "java.util.logging.config.class", "read";
86         permission java.util.PropertyPermission "java.util.logging.config.file", "read";
87         permission java.util.PropertyPermission "org.apache.juli.AsyncLoggerPollInterval", "read";
88         permission java.util.PropertyPermission "org.apache.juli.AsyncMaxRecordCount", "read";
89         permission java.util.PropertyPermission "org.apache.juli.AsyncOverflowDropType", "read";
90         permission java.util.PropertyPermission "org.apache.juli.ClassLoaderLogManager.debug", "read";
91         permission java.util.PropertyPermission "catalina.base", "read";
92
93         // Note: To enable per context logging configuration, permit read access to
94         // the appropriate file. Be sure that the logging configuration is
95         // secure before enabling such access.
96         // E.g. for the examples web application (uncomment and unwrap
97         // the following to be on a single line):
98         // permission java.io.FilePermission "${catalina.base}${file.separator}
99         //  webapps${file.separator}examples${file.separator}WEB-INF
100         //  ${file.separator}classes${file.separator}logging.properties", "read";
101 };
102
103 // These permissions apply to the server startup code
104 grant codeBase "file:${catalina.home}/bin/bootstrap.jar" {
105         permission java.security.AllPermission;
106 };
107
108 // These permissions apply to the servlet API classes
109 // and those that are shared across all class loaders
110 // located in the "lib" directory
111 grant codeBase "file:${catalina.home}/lib/-" {
112         permission java.security.AllPermission;
113 };
114
115
116 // If using a per instance lib directory, i.e. ${catalina.base}/lib,
117 // then the following permission will need to be uncommented
118 // grant codeBase "file:${catalina.base}/lib/-" {
119 //         permission java.security.AllPermission;
120 // };
121
122
123 // ========== WEB APPLICATION PERMISSIONS =====================================
124
125
126 // These permissions are granted by default to all web applications
127 // In addition, a web application will be given a read FilePermission
128 // for all files and directories in its document root.
129 grant {
130     // Required for JNDI lookup of named JDBC DataSource's and
131     // javamail named MimePart DataSource used to send mail
132     permission java.util.PropertyPermission "java.home", "read";
133     permission java.util.PropertyPermission "java.naming.*", "read";
134     permission java.util.PropertyPermission "javax.sql.*", "read";
135
136     // OS Specific properties to allow read access
137     permission java.util.PropertyPermission "os.name", "read";
138     permission java.util.PropertyPermission "os.version", "read";
139     permission java.util.PropertyPermission "os.arch", "read";
140     permission java.util.PropertyPermission "file.separator", "read";
141     permission java.util.PropertyPermission "path.separator", "read";
142     permission java.util.PropertyPermission "line.separator", "read";
143
144     // JVM properties to allow read access
145     permission java.util.PropertyPermission "java.version", "read";
146     permission java.util.PropertyPermission "java.vendor", "read";
147     permission java.util.PropertyPermission "java.vendor.url", "read";
148     permission java.util.PropertyPermission "java.class.version", "read";
149     permission java.util.PropertyPermission "java.specification.version", "read";
150     permission java.util.PropertyPermission "java.specification.vendor", "read";
151     permission java.util.PropertyPermission "java.specification.name", "read";
152
153     permission java.util.PropertyPermission "java.vm.specification.version", "read";
154     permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
155     permission java.util.PropertyPermission "java.vm.specification.name", "read";
156     permission java.util.PropertyPermission "java.vm.version", "read";
157     permission java.util.PropertyPermission "java.vm.vendor", "read";
158     permission java.util.PropertyPermission "java.vm.name", "read";
159
160     // Required for OpenJMX
161     permission java.lang.RuntimePermission "getAttribute";
162
163     // Allow read of JAXP compliant XML parser debug
164     permission java.util.PropertyPermission "jaxp.debug", "read";
165
166     // All JSPs need to be able to read this package
167     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat";
168
169     // Precompiled JSPs need access to these packages.
170     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.el";
171     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime";
172     permission java.lang.RuntimePermission
173      "accessClassInPackage.org.apache.jasper.runtime.*";
174
175     // Applications using WebSocket need to be able to access these packages
176     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket";
177     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server";
178 };
179
180
181 // The Manager application needs access to the following packages to support the
182 // session display functionality. It also requires the custom Tomcat
183 // DeployXmlPermission to enable the use of META-INF/context.xml
184 // These settings support the following configurations:
185 // - default CATALINA_HOME == CATALINA_BASE
186 // - CATALINA_HOME != CATALINA_BASE, per instance Manager in CATALINA_BASE
187 // - CATALINA_HOME != CATALINA_BASE, shared Manager in CATALINA_HOME
188 grant codeBase "file:${catalina.base}/webapps/manager/-" {
189     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
190     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session";
191     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager";
192     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util";
193     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util";
194     permission org.apache.catalina.security.DeployXmlPermission "manager";
195 };
196 grant codeBase "file:${catalina.home}/webapps/manager/-" {
197     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
198     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session";
199     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager";
200     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util";
201     permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util";
202     permission org.apache.catalina.security.DeployXmlPermission "manager";
203 };
204
205 // The Host Manager application needs the custom Tomcat DeployXmlPermission to
206 // enable the use of META-INF/context.xml
207 // These settings support the following configurations:
208 // - default CATALINA_HOME == CATALINA_BASE
209 // - CATALINA_HOME != CATALINA_BASE, per instance Host Manager in CATALINA_BASE
210 // - CATALINA_HOME != CATALINA_BASE, shared Host Manager in CATALINA_HOME
211 grant codeBase "file:${catalina.base}/webapps/host-manager/-" {
212     permission org.apache.catalina.security.DeployXmlPermission "host-manager";
213 };
214 grant codeBase "file:${catalina.home}/webapps/host-manager/-" {
215     permission org.apache.catalina.security.DeployXmlPermission "host-manager";
216 };
217
218
219 // You can assign additional permissions to particular web applications by
220 // adding additional "grant" entries here, based on the code base for that
221 // application, /WEB-INF/classes/, or /WEB-INF/lib/ jar files.
222 //
223 // Different permissions can be granted to JSP pages, classes loaded from
224 // the /WEB-INF/classes/ directory, all jar files in the /WEB-INF/lib/
225 // directory, or even to individual jar files in the /WEB-INF/lib/ directory.
226 //
227 // For instance, assume that the standard "examples" application
228 // included a JDBC driver that needed to establish a network connection to the
229 // corresponding database and used the scrape taglib to get the weather from
230 // the NOAA web server.  You might create a "grant" entries like this:
231 //
232 // The permissions granted to the context root directory apply to JSP pages.
233 // grant codeBase "file:${catalina.base}/webapps/examples/-" {
234 //      permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
235 //      permission java.net.SocketPermission "*.noaa.gov:80", "connect";
236 // };
237 //
238 // The permissions granted to the context WEB-INF/classes directory
239 // grant codeBase "file:${catalina.base}/webapps/examples/WEB-INF/classes/-" {
240 // };
241 //
242 // The permission granted to your JDBC driver
243 // grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/driver.jar!/-" {
244 //      permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
245 // };
246 // The permission granted to the scrape taglib
247 // grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/scrape.jar!/-" {
248 //      permission java.net.SocketPermission "*.noaa.gov:80", "connect";
249 // };
250
251 // To grant permissions for web applications using packed WAR files, use the
252 // Tomcat specific WAR url scheme.
253 //
254 // The permissions granted to the entire web application
255 // grant codeBase "war:file:${catalina.base}/webapps/examples.war*/-" {
256 // };
257 //
258 // The permissions granted to a specific JAR
259 // grant codeBase "war:file:${catalina.base}/webapps/examples.war*/WEB-INF/lib/foo.jar" {
260 // };