记一次Linux上Tomcat启动权限的学习和思考的记录
这个过程不见得有多少技术,但从一个问题出发,学习到知识,那是粉有意思的~特作记录~
前一阵子已经把服务器上的Tomcat配置完毕。但使用一阵时间之后,由于不熟悉Linux下的权限管理,多次对Tomcat和其下的WebApp进行权限更改。结果权限配置大混乱。
服务器管理员只有我和阿威,Tomcat是阿威安装的,整个Tomcat的被调整为Owner是root,组是阿威的组。开始一段时间,我没有对Tomcat进行操作,没发现我不能启动和停止Tomcat的运行状态。后来由于需要在服务器上展示团委网站,我把项目上传到服务器上,然后发现我竟然不能重启Tomcat!运行tomcat的 startup.sh 启动服务,系统报出的错误是 JAVA_HOME or CATALINA_HOME not defind 。ECHO这两个变量,发现果断存在,可是我就是启动不了。纠结~!我Su到阿威的用户,结果还是启动不了。切换到超级管理员,启动,还是报这个错误。崩溃鸟!只好让阿威亲自启动。
如此几次,我都烦了。今天特地处理一下这个问题,突然想到是不是权限问题。查看发现Tomcat的权限果断与我无关。想了想,建一个Tomcat的组,然后把阿威和我都加入这个组中,然后把Tomcat设置属组为tomcat。于是,我顺利的流畅的爽快的启动和停止Tomcat的运行。
再次上传团委网站,上传到服务器上的Web项目竟然显示一片空白。喵了个咪,没有错误信息,就是一片子空白。什么鸟毛问题啊?打开其它Web项目,他们都跑的好好的啊!可是为毛我的就是显示一片子空白呢?!!!!
我把刚上传的Web项目权限什么的,都修改得和其它Web项目一个样子,可是,还是一片子空白!靠,怒了!我直接把其它项目复制,改名再跑。哦日!还是空白一片!
想自杀了……
千找万找,就是找不到原因,最后查看Tomcat的日志,毛病,Tomcat没把错误报到页面上来,我还以为这跟Tomcat没有关系,我竟然最后才查Tomcat的输出日志……
找到一句长了这个模样的信息:/usr/local/apache-tomcat-7.0.21/work/Catalina/localhost/tw_page/ (Permission denied ) 是说这个目录木有操作权限。
晕!我快快查看tomcat的目录权限,www组的权限是rwx,木有问题啊!!!无语ing。
后来想到一点,我来精神了:这Tomcat启动时,是什么权限啊?谷歌+百度搜索,硬是没有人明确的告诉我,这Tomcat运行时是什么用户。怒了,我自己动手测试:
Java里Runtime.getRuntime().exec (String cmd)可以运行系统命令……(此时我才知道这是一个大杀器。)
通过这个方法,执行Linux查询自己是神马用户的命令: whoami 就可以知道自己是神马东西了。
<%@ page contentType="text/html; charset=utf-8" import="java.io.*"%>
<%
try
{
Process process = Runtime.getRuntime().exec ("whoami");
String line = new String();
out.print("本JSP页面所属用户:");
while ((line = new LineNumberReader (new InputStreamReader(process.getInputStream()))
.readLine ()) != null){
out.println(line);
}
out.print("<br/>查看目录文件:/home/chenyoca</br>");
for(File f : new File("/home/chenyoca").listFiles()){
out.println(f.getName()+"<br/>");
}
}catch (java.io.IOException e){
out.println ("IOException " + e.getMessage());
}
%>
?
首先在本地上测试一下,结果如下:
?
运行结果显示,是我登录系统的用户名。由于Windows只有一个用户,在Windows平台下,基本没有什么权限可言。登录了就是最高权限……
拿到服务器上测试:
结果显示,也是我登录系统的用户名。喵了个咪,肿么是我的……果断su到阿威的号,一看,还是我的。
难道是谁启动Tomcat,这进程就是谁的?一试,果然如此。
?
后来,ps -Al查看,发现列表前面有一行东西长的好熟悉,把列表拉到列表头一看,原来是UID……我无知了。T_T
我突然想到,Tomcat如果是Root启动的话,那岂不是很危险?
你看,如果Web项目被挂了WebShell,就可以完全执行系统命令啦!
果断拿自己的帐号试一下。先查询HOME目录下,自己的文件列表:
添加一行:
out.print("<br/>查看目录文件:/home/chenyoca</br>");
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。