wiki:waue/2010/0528
Servlet
tomcat

  • 測試tomcat 的執行權限
  • 如何讓 Servlet 執行 shell 或其他指令
  • 如何編譯 Servlet 與執行

如何讓 Servlet 執行 shell 或其他指令

servlet 就是 java ,因此呼叫shell 或指令用同一個語法

Runtime.getRuntime().exec( "/path/my_shell.sh");

如何編譯 Servlet 與執行

需要額外引入 servlet-api.jar 與 jsp-api.jar (此兩個檔可以到 tomcat_home/lib/)

HelloWorldExample?.java

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id: HelloWorldExample.java 500674 2007-01-27 23:15:00Z markt $
 *
 */

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

/**
 * The simplest possible servlet.
 *
 * @author James Duncan Davidson
 */

public class HelloWorldExample extends HttpServlet {


    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        ResourceBundle rb =
            ResourceBundle.getBundle("LocalStrings",request.getLocale());
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        Runtime.getRuntime().exec( "/home/waue/a.sh");

        out.println("<html>");
        out.println("<head>");

      String title = rb.getString("helloworld.title");
  title="waue test!";

      out.println("<title>" + title + "</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");

  // note that all links are created to be relative. this
  // ensures that we can move the web application that this
  // servlet belongs to to a different place in the url
  // tree and not have any harmful side effects.

        // XXX
        // making these absolute till we work out the
        // addition of a PathInfo issue

      out.println("<a href=\"../helloworld.html\">");
        out.println("<img src=\"../images/code.gif\" height=24 " +
                    "width=24 align=right border=0 alt=\"view code\"></a>");
        out.println("<a href=\"../index.html\">");
        out.println("<img src=\"../images/return.gif\" height=24 " +
                    "width=24 align=right border=0 alt=\"return\"></a>");
        out.println("<h1>" + title + "</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

編譯過後需將class 檔 放到 $tomcat_home/webapps/examples/WEB-INF/classes/ 資料夾下

重新啟動 tomcat 或 用 manager/的 reload examples 資料夾

測試tomcat 的執行權限

範例中會執行 /home/waue/a.sh

a.sh 的執行權限為 700 擁有者為 waue

#!/bin/bash

date=`date`
echo "gogogo" > a.txt
echo "$date" >> a.txt

如果 tomcat 的執行權限不是 waue ,則無法執行也無法寫入

答案如預期,證明 tomcat 的執行權限即為 啟動tomcat 的使用者。

Last modified 14 years ago Last modified on May 28, 2010, 2:01:51 PM