`
桥下一粒砂
  • 浏览: 208115 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

记一次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>");
for(File f : new File("/home/chenyoca").listFiles()){
    out.println(f.getName()+"<br/>");
}
结果:

 


额,果断秒杀。

既然如此,那可以做的事件就多了……如果我的网站被入侵,而启动Tomcat的就是我,哪怕是阿威,那就危险啦!除了执行sudo需要输入密码,基本上我所在用户组的数据就全部危险了!

所以,我要限制Tomcat的权限。

可是,我要怎么设置,才能让我启动Tomcat,但Tomcat只能在固定目录里读写执行呢?

在伟大的脑袋思考,加上以前了解的权限管理,我果断得出以下方法:

1、把Tomcat包含子目录,属主和组全部设置root。
# chown root -R /usr/local/tomcat
       # chgrp root -R /usr/local/tomcat

2、把works目录及其子目录设置为www组,组属性rwx。
# chgrp www -R /usr/local/tomcat/works
       # chmod g+rws -R /usr/local/tomcat/works

3、把logs目录及其子目录设置为www组,组属性rw-。
        # chgrp www -R /usr/local/tomcat/logs
        # chmod g+rws -R /usr/local/tomcat/logs

4、启动Tomcat的管理员加入www组,这样Tomcat启动后,可以向logs目录写入日志,works目录生成缓存。

5、所有WebApp全部目录设置不可写,某些需要上传图片的目录,把写操作打开,并关闭执行操作
# chown root -R /var/www-data/*
       # chgrp www -R /var/www-data/*
       # chmod a-x -R /var/www-data/WebApp/WritenDir/*

OK,模拟一下入侵操作:

某蛋疼君发现了网站存在漏洞,通过利用漏洞,把WebShell写到上传图片的目录中。他成功上传了,因为图片目录可写。然后,他打开上传的文件,因为目录内的文件不可执行,只能读取,所以服务器会报404错误。

测试一下,先打开可执行操作,运行结果如下:

 


关闭执行操作,结果果断报404错误:

 

 

 

总结:

这次从问题出发,到解决问题,对Linux上Web应用的权限管理学习得比较深刻。也算是长知识了。

 

分享到:
评论
2 楼 alask2011 2011-10-26  

public class A{


main(){


}
}
1 楼 laiweiweihi 2011-10-24  
wow,很牛逼啊大哥,绝对是神贴,超级喜欢的,哈哈哈,改天试试。

相关推荐

    linux 启动 Tomcat 命令

    在Linux环境下部署与管理Java Web应用程序时,Apache Tomcat服务器作为最常用的轻量级应用容器之一,其启动与停止命令是运维人员必须掌握的基本技能。本文将详细介绍如何在Linux系统中启动Tomcat服务器,并解释相关...

    Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项(tomcat8为例)

    在Linux(CentOS7)操作系统中安装Apache Tomcat并将其设置为开机启动是一项常见的任务,特别是在部署Java web应用时。本篇文章将详细讲解如何在CentOS7上安装Tomcat8并将其配置为自启动服务。 首先,我们来了解...

    Linux下Tomcat重新启动

    在 Linux 系统下,Tomcat 的重新启动是一个常见的问题,很多开发者和运维人员都会遇到这种情况。那么,如何在 Linux 系统下重新启动 Tomcat 呢?下面,我们将详细讲解 Tomcat 的重新启动过程。 首先,我们需要了解 ...

    linux环境下配置Tomcat自启动

    在Linux环境下配置Tomcat自启动是一项常见的系统管理任务,这对于保持服务器服务的连续性和稳定性至关重要。下面我们将详细探讨如何在Linux系统中设置Apache Tomcat自动启动,并了解与这个过程相关的概念和技术。 ...

    linux版的tomcat

    安装完成后,我们可以在Linux上启动Tomcat。默认情况下,Tomcat的可执行脚本位于`/usr/local/tomcat/bin`目录下,如`catalina.sh`。使用以下命令启动Tomcat: ```bash sudo /usr/local/tomcat/bin/catalina.sh ...

    Linux 部署jenkins war包直接tomcat启动

    接下来,我们进入主题,即在Linux系统上部署Jenkins WAR包到Tomcat服务器。以下是详细的步骤: 1. **安装Java运行环境**:Jenkins依赖Java运行,因此首先确保Linux服务器已安装Java 8或更高版本。可以通过`java -...

    ant远程调用shell,启动linux上的tomcat

    总的来说,通过Ant远程调用Shell启动Linux上的Tomcat是一种实用的方法,它结合了Ant的灵活性和Linux服务器的稳定性,为Java应用的部署提供了便利。同时,理解和掌握这种技术对于提升开发和运维的效率至关重要。

    Linux中将Tomcat添加到守护进程

    在Linux环境中,为了确保应用程序如Tomcat能够随系统自动启动并作为守护进程运行,需要进行一系列的配置步骤。本文将详细介绍如何将Tomcat添加到...这确保了即使在服务器上发生其他问题时,Tomcat也能正常启动和运行。

    linux下tomcat自动启动脚本

    教你如何在linux下配置tomcat自动启动的脚本

    Linux下Tomcat的启动、关闭、杀死进程

    在Linux环境下部署和管理Java Web应用程序时,Apache Tomcat作为一款广泛使用的应用服务器,其操作过程对于系统管理员和开发人员来说至关重要。本文将详细介绍如何在Linux环境下启动、关闭以及强制终止Tomcat服务。 ...

    linux64_tomcat7

    解压后,会得到一个包含Tomcat所有文件和目录的结构,其中包括启动和停止服务器的脚本、配置文件、Web应用目录(如webapps)、日志文件等。 "绿色资源网.url"可能是一个链接,指向提供该Tomcat版本下载的网站。用户...

    Linux下配置tomcat和jdk

    在Linux环境下配置Tomcat和JDK,不仅能够提高系统的稳定性和安全性,还能更好地利用Linux系统的资源管理优势。 #### 二、准备工作 在正式安装配置之前,确保已经安装了Linux操作系统,并且熟悉基本的Linux命令操作...

    Linux版本 tomcat 8.5.78 下载

    总结,Linux版Tomcat 8.5.78提供了一个可靠的Java Web应用平台,其易用性和灵活性使其成为开发和学习的理想选择。通过了解其安装、配置、管理以及优化方法,开发者可以更好地利用Tomcat来构建和部署Web应用程序。

    Linux 配置 tomcat 开机启动.txt

    学习如何创建和配置一个自定义的 `init.d` 脚本来实现 Tomcat 的开机启动。了解脚本的工作原理以及如何检查 Tomcat 的状态。 #### 环境准备 - **操作系统**: Linux (例如 CentOS、Ubuntu 等) - **软件**: Apache ...

    tomcat_linux

    为了方便在任意目录下启动和停止Tomcat,我们可以将其bin目录添加到PATH环境变量中。编辑`~/.bashrc`或`~/.bash_profile`文件: ```bash nano ~/.bashrc ``` 在文件末尾添加以下行: ```bash export PATH=$PATH:/...

    linux布置tomcat基础命令学习

    新手跟着做可以在linux上布置tomcat以及jdk,能学会linux的最基本操作

    Tomcat linux服务和自启动

    解压后的目录结构会包含`bin`, `conf`, `lib`, `webapps`等子目录,其中`bin`目录下有启动和停止Tomcat的脚本。 **2. 配置环境变量** 为了方便使用Tomcat命令,需要在用户的`.bashrc`或`.bash_profile`文件中添加...

    解决Linux下tomcat连接MySQL数据库

    本问题中,开发者遇到了一个特定的错误,即在尝试通过Tomcat服务器连接到MySQL数据库时,出现了`CommunicationsException`,进一步深入是由于`AccessControlException`导致的,错误信息提示访问权限被拒绝(`access ...

Global site tag (gtag.js) - Google Analytics