电竞比分网-中国电竞赛事及体育赛事平台

分享

記一次Linux上Tomcat啟動權限的學習和思考的記錄

 浸心閣 2016-01-13


這個過程不見得有多少技術,但從一個問題出發(fā),學習到知識,那是粉有意思的~特作記錄~

前一陣子已經(jīng)把服務器上的Tomcat配置完畢。但使用一陣時間之后,由于不熟悉Linux下的權限管理,多次對Tomcat和其下的WebApp進行權限更改。結果權限配置大混亂。

服務器管理員只有我和阿威,Tomcat是阿威安裝的,整個Tomcat的被調(diào)整為Owner是root,組是阿威的組。開始一段時間,我沒有對Tomcat進行操作,沒發(fā)現(xiàn)我不能啟動和停止Tomcat的運行狀態(tài)。后來由于需要在服務器上展示團委網(wǎng)站,我把項目上傳到服務器上,然后發(fā)現(xiàn)我竟然不能重啟Tomcat!運行tomcat的 startup.sh 啟動服務,系統(tǒng)報出的錯誤是 JAVA_HOME or CATALINA_HOME not defind 。ECHO這兩個變量,發(fā)現(xiàn)果斷存在,可是我就是啟動不了。糾結~!我Su到阿威的用戶,結果還是啟動不了。切換到超級管理員,啟動,還是報這個錯誤。崩潰鳥!只好讓阿威親自啟動。

如此幾次,我都煩了。今天特地處理一下這個問題,突然想到是不是權限問題。查看發(fā)現(xiàn)Tomcat的權限果斷與我無關。想了想,建一個Tomcat的組,然后把阿威和我都加入這個組中,然后把Tomcat設置屬組為tomcat。于是,我順利的流暢的爽快的啟動和停止Tomcat的運行。

再次上傳團委網(wǎng)站,上傳到服務器上的Web項目竟然顯示一片空白。喵了個咪,沒有錯誤信息,就是一片子空白。什么鳥毛問題???打開其它Web項目,他們都跑的好好的?。】墒菫槊业木褪秋@示一片子空白呢?!?。。?/div>

我把剛上傳的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)可以運行系統(tǒng)命令……(此時我才知道這是一個大殺器。)
通過這個方法,執(zhí)行Linux查詢自己是神馬用戶的命令: whoami 就可以知道自己是神馬東西了。

Java代碼  收藏代碼
  1. <%@ page contentType="text/html; charset=utf-8" import="java.io.*"%>  
  2. <%  
  3. try  
  4. {  
  5.     Process process = Runtime.getRuntime().exec ("whoami");  
  6.     String line = new String();  
  7.     out.print("本JSP頁面所屬用戶:");  
  8.     while ((line = new LineNumberReader (new InputStreamReader(process.getInputStream()))  
  9.         .readLine ()) != null){  
  10.         out.println(line);  
  11.     }  
  12.     out.print("<br/>查看目錄文件:/home/chenyoca</br>");  
  13.     for(File f : new File("/home/chenyoca").listFiles()){  
  14.                 out.println(f.getName()+"<br/>");  
  15.     }  
  16. }catch (java.io.IOException e){  
  17.         out.println ("IOException " + e.getMessage());  
  18. }  
  19. %>  

首先在本地上測試一下,結果如下:

 

運行結果顯示,是我登錄系統(tǒng)的用戶名。由于Windows只有一個用戶,在Windows平臺下,基本沒有什么權限可言。登錄了就是最高權限……

拿到服務器上測試:
結果顯示,也是我登錄系統(tǒng)的用戶名。喵了個咪,腫么是我的……果斷su到阿威的號,一看,還是我的。
難道是誰啟動Tomcat,這進程就是誰的?一試,果然如此。

 


后來,ps -Al查看,發(fā)現(xiàn)列表前面有一行東西長的好熟悉,把列表拉到列表頭一看,原來是UID……我無知了。T_T


我突然想到,Tomcat如果是Root啟動的話,那豈不是很危險?

你看,如果Web項目被掛了WebShell,就可以完全執(zhí)行系統(tǒng)命令啦!

果斷拿自己的賬號試一下。先查詢HOME目錄下,自己的文件列表:
添加一行:

out.print("<br/>查看目錄文件:/home/chenyoca</br>");
for(File f : new File("/home/chenyoca").listFiles()){
    out.println(f.getName()+"<br/>");
}
結果:

 


額,果斷秒殺。

既然如此,那可以做的事件就多了……如果我的網(wǎng)站被入侵,而啟動Tomcat的就是我,哪怕是阿威,那就危險啦!除了執(zhí)行sudo需要輸入密碼,基本上我所在用戶組的數(shù)據(jù)就全部危險了!

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

可是,我要怎么設置,才能讓我啟動Tomcat,但Tomcat只能在固定目錄里讀寫執(zhí)行呢?

在偉大的腦袋思考,加上以前了解的權限管理,我果斷得出以下方法:

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全部目錄設置不可寫,某些需要上傳圖片的目錄,把寫操作打開,并關閉執(zhí)行操作。
# chown root -R /var/www-data/*
       # chgrp www -R /var/www-data/*
       # chmod a-x -R /var/www-data/WebApp/WritenDir/*

OK,模擬一下入侵操作:

某蛋疼君發(fā)現(xiàn)了網(wǎng)站存在漏洞,通過利用漏洞,把WebShell寫到上傳圖片的目錄中。他成功上傳了,因為圖片目錄可寫。然后,他打開上傳的文件,因為目錄內(nèi)的文件不可執(zhí)行,只能讀取,所以服務器會報404錯誤。

測試一下,先打開可執(zhí)行操作,運行結果如下:

 


關閉執(zhí)行操作,結果果斷報404錯誤:

 

 

 

總結:

這次從問題出發(fā),到解決問題,對Linux上Web應用的權限管理學習得比較深刻。也算是長知識了。

 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多