Tomcat 7.0.73至7.0.92版本AllowLinking功能失效问题求助
解决Tomcat 7.0.92中符号链接访问失败的问题
我之前帮同事排查过完全一致的问题,Tomcat 7.0.92在符号链接的处理逻辑上确实和7.0.73有个关键变动,而且这个改动在常规变更日志里藏得比较深,很容易漏掉。
问题根源
Tomcat从7.0.82版本开始,对符号链接的安全校验做了强化。虽然你已经把allowLinking设为true,但这个参数在高版本里的行为变了:
- 7.0.73及更早版本:
allowLinking=true直接允许所有符号链接,不管是指向Web应用内部还是外部目录 - 7.0.92版本:
allowLinking=true仅允许指向Web应用内部的符号链接,如果你的链接是指向外部目录的,必须额外开启allowUnsafeLinking参数
修复步骤
修改Context配置
打开Tomcat 7.0.92的conf/context.xml(如果是单个Web应用的问题,也可以修改对应应用的META-INF/context.xml),在<Context>标签里添加allowUnsafeLinking="true":<Context allowLinking="true" allowUnsafeLinking="true"> <!-- 你的其他配置项 --> </Context>校验权限设置
确保运行Tomcat的系统用户,对符号链接的目标目录拥有读取权限;同时符号链接本身的权限也要正常(比如Linux下至少是rwxr-xr-x,Windows下要保证用户能访问链接目标)。重启Tomcat
配置修改后必须重启服务,之后再访问符号链接指向的资源应该就能正常加载了。
补充说明
这个allowUnsafeLinking参数是Tomcat为了平衡安全性和兼容性新增的,官方文档里只是简单提了一句,没放在显眼的版本变更说明里,所以很容易踩坑。如果你的符号链接是指向Web应用内部的目录,其实不需要开这个参数,但如果是跨外部目录,就必须加上。
内容的提问来源于stack exchange,提问作者BrandG
相关产品推荐
相关产品推荐

