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 関数の説明

推薦する

Dockerコンテナ間で通信する3つの方法

Docker コンテナは互いに分離されており、相互にアクセスできないことは誰もが知っていますが、依存...

nginx リクエスト ヘッダー データ読み取りプロセスの詳細な説明

前回の記事では、nginx がリクエスト ラインのデータを読み取って、リクエスト ラインを解析する方...

MySQLはmysqldump+binlogを使用して、削除されたデータベースの原理分析を完全に復元します。

1. 概要MySQL データベースの日常的な操作とメンテナンスにおいて、ユーザーが誤ってデータを削...

MySQL 8.0.15 のダウンロードとインストールの詳細なチュートリアルは初心者にとって必須です。

この記事では、MySQL 8.0.15をダウンロードしてインストールするための具体的な手順を参考まで...

Serv-U FTPとADの完璧な統合ソリューションの詳細な説明

会社が現在使用しているソリューションを確認するためにバックエンドにログインしました。使用される FT...

Vueリスナーの使用例の詳細な説明

1つ目はjQueryのajaxを使用してリクエストを送信することです ユーザーが登録するときに、リス...

ふるい抽選を実施するミニプログラム

この記事の例では、ふるい抽選を実装するためのミニプログラムの具体的なコードを参考までに共有しています...

CSS3実践手法のまとめ(推奨)

1. 丸い境界線: CSSコードコンテンツをクリップボードにコピー境界線の半径: 4px ; 2....

Mac ノードの削除と再インストールのケーススタディ

Macノードの削除と再インストール消去 ノード -v sudo npm アンインストール npm -...

JSONObject の使用方法の詳細な説明

JSONObject は単なるデータ構造であり、JSON 形式のデータ構造 ( key-value構...

CSS3 で高さと幅を不定にして垂直と水平に中央揃えするいくつかの方法

1. フレックスレイアウト 。父親 { ディスプレイ: フレックス; コンテンツの中央揃え: 中央;...

クールな花火効果を実現するjs

この記事では、jsを使用してクールな花火効果を実現するための具体的なコードを参考までに共有します。具...

ハイパーリンクAタグを学ぶ

聞く: CSS を使用してハイパーリンクのスタイルを設定しましたが、ホバーしても機能しません。なぜこ...

レイアウトサイズを変更するために左右にドラッグする純粋なCSS

ブラウザの非overflow:auto要素resize伸縮機能を利用して、JavaScript を使...