Tomcat教程

Symbolic Links

在默认情况下,出于安全防护因素考虑,Tomcat不允许使用Web应用程序内部的符号链 接(SymboUc link)。也就是说,如果您在Tomcat正给文件提供服务的Web应用程序内 部放置符号链接,而且您要求这一符号链接(symlink)与Web客户端通信,那么Tomcat 将会回应404 Not Found error页。例如,如果Web应用程序叫做pets-r-us,而服务器叫 做mall.example.com,且您在Web应用程序中添加了像下面这样的符号链接:

$ cd $CATALINA_H0ME/webapps/pets-r-us 
$ In -s /home/hamster//upload/image/course/tomcat /upload/image/course/tomcat

如果正运行Tomcat JVM的操作系统用户可以读取home/hamster//upload/image/course/tomcat目录,那么在访 问时,您应考虑Tomcat会提供包含在改目录中的图像,例如,http://malL.example.com/pets-r-us//upload/image/course/tomcat/hamster1.jpg,但默认不会出现这样的图像。

如果Tomcat确实默认允许符号链接,那么请您勾画一下,如果黑客恰好能编写一个到 Web应用程序众多目录之一的链接,会发生什么情况。黑客能增加一个使Tomcat服务于任何文件的符号链接,而这些文件可以被Tomcat JVM用户读取,且Tomcat实例管理员可能不知道给不该掌握的人提供了这些文件的服务因为预先没有掌握这是哪些文件,所 以对Tomcat而言,默认最好不允许提供符号链接服务。

如果要允许Tomcat通过符号链接供应文件,那么您能基于每个Web应用程序进行配置。 要完成这一工作,必须为Web应用程序配置显式Context元素。如果选择允许Tomcat自动 产生并配置Context的方式部署Web应用程序,而您没有外在的Context元素。那么您不能配置Tomcat提供符号链接。通过配置清楚的Context元素部署Web应用程序,并在该元 素上增加allowLinking=“true”,对Tomcat5.0.x和更高版本,内容如下所:

<Context path="/pets-r-us" docBase="pets-r-us" allowLinkirg="true">
</Context>

对于Tomcat 4.1版本Context元素应如下:

<Context path="/pets-r-us" docBase="pets-r-us">
<Resources className="org.apache.naming.resources.FileDirContext" 
       allowiLinking="ture"/>
</Context>

然后重启Web应用程序,或者重启Tomcau重启Web应用程序就足够了。您的符号链接应能提供服务,但要清楚:

运行Tomcat JVM的用户必须能读取您符号链接的内容。确信该符号链接指向的文件的许可权与文件的所有权或目录都可以被运行Tomcat JVM的用户读取。

如果您的符号正链接一个外部目录到Web应用程序的目录中,如果您请求该符号链接,那么您还会从Tomcat得到一个404响应页,而且既不会得到该目录下打开的 目录列表,也不会得到任何的welcome文件,尝试在您用符号链接的目录中替换 index.html或index.jsp文件。或者,尝试对驻留在符号链接的目录中执行一个直接的HTTP请求,访问一个可读文件。

如果您巳对它进行了正确配置,那么Tomcat将使用您的Web应用程序的符号链接,顺利地提供文件。

关注微信获取最新动态