Tomcatサーバーのセキュリティ設定方法

Tomcatサーバーのセキュリティ設定方法

Tomcat は、Java Community Process を通じて Sun が開発した、広く使用されているサーブレットおよび JavaServer Page (JSP) テクノロジの公式リファレンス実装である HTTP サーバーです。サーブレットと JSP テクノロジは、HTTP サーバー アプリケーションの構築に使用されます。サーブレット テクノロジには、アクセス セキュリティ、セッション管理、スレッド制御など、多くの機能が追加されています。 JSP テクノロジーは、動的に生成された HTML ページを処理する簡単な方法を提供します。これらの HTML ページは、実行時間を短縮するためにサーブレットに直接コンパイルされます。セキュリティを確保するための上記の 2 つのテクノロジに加えて、Tomcat パラメータを構成してセキュリティを強化することもできます。

セキュリティ設定:

1. webappsディレクトリ内のすべてのファイルを削除し、tomcat管理インターフェースを無効にします。

rm -rf /usr/local/tomcat/apache-tomcat-9.0.1/webapps/*

2. tomcat-users.xml ファイル内のすべてのユーザー権限をコメント化または削除します。

3. バージョン情報を非表示にしてconf/server.xmlを変更する


3. ユーザーの質問:

nginx と httpd は、ルート ユーザーを使用してポート 80 のガードを開始し、子プロセス/スレッドは setuid() および setgid() 関数を通じて通常のユーザーに切り替わります。つまり、親プロセスの所有者は root ユーザーであり、子プロセスとマルチスレッドの所有者は非 root ユーザーです。このユーザーにはシェルがなく、ssh およびコンソール経由でシステムにログインすることはできません。
Java の JVM はシステムから独立しており、OS 上に構築されています。どのユーザーを使用して Tomcat を起動しても、Tomcat は所有者の権限を継承します。
これにより問題が発生します。Linux システムでは、1024 未満のポートを使用できるのは root のみであるため、Tomcat のデフォルト ポートは 8080 になっています。ポート 80 を使用する場合は、Tomcat を root としてのみ起動できます。これにより、多くのセキュリティ上の問題が発生します。

Tomcat の起動にのみ使用できるユーザーを作成します。

グループ追加 -g 80 トムキャット
adduser -o --home /tomcat --shell /sbin/nologin --uid 80 --gid 80 -c "Webサーバー" tomcat
chown tomcat:tomcat -R /usr/local/tomcat/apache-tomcat-9.0.1/*
su - tomcat -c "/usr/local/tomcat/apache-tomcat-9.0.1/bin/startup.sh"

ポートマッピングを作成し、ポート80にアクセスするときにポート8080を呼び出す

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

リダイレクトをキャンセル:

iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

4. 戦争の自動展開をオフにする

vim conf/server.xml

5. 404 に表示されるバージョン情報を非表示にします。

lib 内の catalina.jar を解凍し、jar xf catalina.jar を実行します。

vim /usr/local/tomcat/apache-tomcat-9.0.1/lib/org/apache/catalina/util/ServerInfo.properties


6. tomcatのシャットダウンコマンドを変更する

Tomcat インスタンスを直接シャットダウンできる管理ポートは、server.xml で定義されます。 Telnet 経由でポートに接続した後、SHUTDOWN (デフォルトのシャットダウン コマンド) を入力して Tomcat インスタンスをシャットダウンできます (この時点でインスタンスはシャットダウンされますが、プロセスはまだ存在することに注意してください)。 Tomcat のポートはデフォルトで閉じられるため、手順は非常に簡単です。デフォルトのポートは 8005 で、コマンドは SHUTDOWN です。 close コマンドをもう少し複雑に変更する必要があります。


またはポート8005を無効にする

<サーバーポート="-1" シャットダウン="シャットダウン">

7. tomcatとプロジェクトユーザーを分ける

Tomcat が Web シェル プログラムに埋め込まれるのを防ぐには、プロジェクト ファイルを変更します。したがって、Tomcat をプロジェクト所有者から分離して、ハッキングされた場合でもプロジェクト ファイルを作成および編集できないようにする必要があります。

8. conf/web.xmlに次の設定を追加します。

9. カスタムエラーページ

web.xml は特定のアプリケーションの下にあり、このアプリケーションの 404 を処理する必要があります。ただし、http://localhost/ は tomcat 独自のアプリケーションにアクセスするため、web.xml 構成は webapp/Root/ の下のアプリケーション内に構成する必要があります。
Tomcat アプリケーションはルート ディレクトリの下に配置されているので、独自のものに置き換えるだけです。
/webapps/ROOT/WEB-INF/web.xmlに追加します

webappsディレクトリにerror.jspファイルを作成します。

<%@ ページコンテンツタイプ="text/html; charset=UTF-8" %>
<%@ ページインポート="java.io.*" %>
<%@ ページインポート="java.util.*" %>
<html>
<ヘッダー>
<title>404 ページ</title>
<本文>
<前>
<%
  列挙<文字列> attributeNames = request.getAttributeNames();
  (attributeNames.hasMoreElements()) の間
  {
    文字列 attributeName = attributeNames.nextElement();
    オブジェクト属性 = request.getAttribute(attributeName);
  out.println("request.attribute['" + attributeName + "'] = " + attribute);
  }
%>
</pre>

exception.jsp ファイル

<%@ ページ contentType="text/html; charset=UTF-8" isErrorPage="true" %>
<%@ ページインポート="java.io.*" %>
<html>
<ヘッダー>
<title>例外ページ</title>
<本文>
<hr/>
<前>
<%
response.getWriter().println("例外: " + 例外);

 if(例外 != null)
{
  response.getWriter().println("<pre>");
  例外.printStackTrace(response.getWriter());
  レスポンスのgetWriter().println("</pre>");
}

 回答
e.getWriter().println("<hr/>");
%>

ブラウザでカスタム エラー ページをテストします。


セッションタイムアウトを定義し、ディレクトリリストを禁止する

さて、この記事はこれで終わりです。お役に立てれば幸いです。

以下もご興味があるかもしれません:
  • Tomcat セキュリティ設定 win2003 tomcat 権限制限
  • Tomcat サーバーのセキュリティ設定
  • Tomcat セキュリティ仕様 (Tomcat セキュリティ強化と仕様)
  • Tomcatのセキュリティ構成とパフォーマンスの最適化の詳細な説明
  • Web セキュリティ - Tomcat は WebDAV を無効にしたり、不要な HTTP メソッドを禁止したりします

<<:  プロジェクトを素早く構築するためのvite+vue3.0+ts+element-plusの実装

>>:  MySQL データベースの型変換のための CAST 関数と CONVERT 関数の説明

推薦する

Linux環境でrmによって誤って削除されたファイルを回復する方法

目次序文RMの後には希望はあるのでしょうか?最前線を使ってファイルを取得するextundeleteを...

MySQLで大きなテーブルを正常に削除する方法の詳細な説明

序文テーブルを削除するには、無意識に思い浮かぶコマンドは、DROP TABLE "テーブル...

Linux (Ubuntu 18.04) に vim エディタをインストールする方法

デスクトップ システムをダウンロードするには、Ubuntu の公式 Web サイト (https:/...

Linux ifconfig コマンドの使用

1. コマンドの紹介ifconfig (ネットワーク インターフェイスを構成する) コマンドは、ネッ...

Linux での MySQL 5.7.19 のインストールに関する問題の概要

初めて仮想マシンに MySQL をインストールしたとき、多くの問題が発生しました。ここでそれらを書き...

dl、dt、dd はいつ使用するのが適切ですか?

dl:定義一覧定義リストdt:定義タイトルタイトルを定義するdd:定義説明定義の説明dt は情報のタ...

Centos7.3は起動時に自動的に起動または指定されたコマンドを実行します

Centos7では、/etc/rc.d/rc.localファイルの権限が削減されており、実行権限があ...

Docker を使用した Redis マスタースレーブレプリケーションの実践の詳細説明

目次1. 背景2. 操作手順3. Dockerをインストールする4. 主なサービス構成5. サービス...

タイムライン効果を実現するCSS3

最近、コンピューターの電源を入れたところ、Geek Academy が新規ユーザーに 1 か月の無料...

CSS Houdini でダイナミックな波効果を実現

CSS Houdini は、CSS 分野における最もエキサイティングなイノベーションとして知られてい...

テーブルの4辺を上下左右にスクロールするように固定する方法

質問:最近、プロジェクトの統計を行っていたときに、テーブルを上下にスクロールしたときにテーブルの先頭...

Windows10にMySQL5.6.35データベースを2つインストールする

次のように、Win10 での 2 つの MySQL5.6.35 データベースのインストールを記録しま...

Javascriptの基礎を学ぶための10の重要な質問

目次1. Javascript とは何ですか? 2. DOMとは何か3. JSコードの実行方法4. ...

MySQL における int の最大値の詳細な説明

導入2日前に見た問題について詳細に書きます。バイトコンピューターがバイナリに基づいていることは誰もが...

Windows で MySQL のルート パスワードをリセットする方法

今日、WordPress がデータベースに接続できないことがわかりました。ウィンドウ サーバーにログ...