ホームページ > バックエンド開発 > PHPチュートリアル > nginx と Tomcat は chroot (jail) 関連の設定を使用します

nginx と Tomcat は chroot (jail) 関連の設定を使用します

WBOY
リリース: 2016-08-08 09:32:41
オリジナル
1710 人が閲覧しました

この記事は設定レコードに焦点を当てており、chroot (jail) の利点については詳しく説明しません。

この記事は 3 つの部分に分かれています: 基本的な chroot ジェイルの構成、nginx 用の chroot ジェイルの構成、Tomcat 用の chrootjail の構成。

1. 基本的な chroot ジェイルを設定します

1.1. chroot ジェイルのルート ディレクトリとしてディレクトリを作成します。

# mkdir /home/chroot/jail
ログイン後にコピー

1.2. ldd コマンドを使用して、chroot ジェイルで実行するコマンドの依存ライブラリを見つけます。

# ldd /bin/bash
	linux-vdso.so.1 =>  (0x00007fff56fcc000)
	libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003ad1200000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000003abe600000)
	libc.so.6 => /lib64/libc.so.6 (0x0000003abe200000)
	/lib64/ld-linux-x86-64.so.2 (0x0000003abde00000)
ログイン後にコピー

1.3. chroot 刑務所のルート ディレクトリにサブフォルダーを作成します。サービス最小化の原則を思い出してください。

# mkdir /home/chroot/jail/bin
# mkdir /home/chroot/jail/lib64
ログイン後にコピー

1.4. バイナリ ファイル (chroot で実行する必要がある) と依存ライブラリを chroot ディレクトリにコピーします。

# cp /bin/bash /home/chroot/jail/bin
# cp /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} \
  /home/chroot/jail/lib64
ログイン後にコピー

1.5. 上記の操作が完了すると、chroot で表示できるようになります。

上記の操作は chroot の下でのみ bash を実行できますが、他の操作は実行できません。したがって、次の例の ls コマンドは見つかりません。

# chroot /home/chroot/jail
bash-4.1# pwd
/
bash-4.1# ls
bash: ls: command not found
bash-4.1# exit
exit
#
ログイン後にコピー
は、pwd などの一部の組み込みシェルのみを実行できますが、バイナリ ファイルと関連する依存ライブラリも chroot ジェイルにコピーしない限り、他のコマンドは実行できません。

1.6. 特定のサービスの起動時に常にエラーが発生する場合は、strace を使用してエラーを確認できます。 nginx 構成の最後に追加されます。


2.nginx設定chrootjail

nginxのインストール方法であるtar.gzのダウンロード、解凍、設定、メイク、インストール方法は省略しています。 。 。

この構成は CentOS6.x 64 ビット システム用です。

2.1. 1.1で述べたルートディレクトリであるchrootディレクトリを指定します。

命名規則を統一するために、次のディレクトリ構造が作成されます:

# D=/home/nginx/jail
# mkdir -p $D
ログイン後にコピー
2.2. 分離環境、jail ルート ディレクトリの下にサブディレクトリを作成します。
# mkdir -p $D/etc
# mkdir -p $D/dev
# mkdir -p $D/var
# mkdir -p $D/usr
# mkdir -p $D/usr/local/nginx
# mkdir -p $D/tmp
# chmod 1777 $D/tmp
# mkdir -p $D/var/tmp
# chmod 1777 $D/var/tmp
# mkdir -p $D/lib64
ログイン後にコピー

2.3. バッファとなる必要なデバイスを $D/dev に作成します。

ここで mknod コマンドを使用してキャッシュ ファイルを作成します:

# /bin/mknod -m 0666 $D/dev/null c 1 3
# /bin/mknod -m 0666 $D/dev/random c 1 8
# /bin/mknod -m 0444 $D/dev/urandom c 1 9
ログイン後にコピー

2.4. すべての nginx ファイルを刑務所にコピーします。

# /bin/cp -farv /usr/local/nginx/* $D/usr/local/nginx
ログイン後にコピー

2.5. 依存ライブラリをjailにコピーします。 (2.5 と 2.4 は 1.4 の処理に相当します)

# ldd /usr/local/nginx/sbin/nginx
ログイン後にコピー
は必要なものをコピーし、サービスは最小限に抑えられます。

2.6. /etc を刑務所にコピーします。

nixCraft チュートリアルでは、これらを特に指摘しており、nginx の実行中に使用する必要があります。

# cp -fv /etc/{group,prelink.cache,services,adjtime,shells,gshadow,shadow,hosts.deny,localtime,nsswitch.conf,nscd.conf,prelink.conf,protocols,hosts,passwd,ld.so.cache,ld.so.conf,resolv.conf,host.conf} $D/etc
ログイン後にコピー
いくつかのフォルダーを追加します:

# cp -avr /etc/{ld.so.conf.d,prelink.conf.d} $D/etc
ログイン後にコピー

2.7 nginx を起動します。

実行中の nginx がある場合は、まずそれを閉じる必要があります:

# killall -9 nginx
ログイン後にコピー

chroot で nginx を開きます:
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -t
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx
ログイン後にコピー
最初に chroot してから開くこともできます:

# chroot /home/nginx/jail 
bash-4.1# /usr/local/nginx/sbin/nginx -t
bash-4.1# /usr/local/nginx/sbin/nginx
ログイン後にコピー

起動時に自動的に開始するように設定します:

# echo '/usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx' >> /etc/rc.local
ログイン後にコピー
chroot を編集する nginx の設定ファイル:

# cd /home/nginx/jail/usr/local/nginx/conf/
# vi nginx.conf
ログイン後にコピー
保存して閉じた後、nginx をテストして再起動します:

# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -t
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -s reload
ログイン後にコピー
chroot 環境を直接コピーした場合、nginx が設定ファイルを認識しない可能性があります。実行してください:

# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ログイン後にコピー
その後、nginx をテストして再起動します。
2.8. 環境にまだ問題がある場合は、strace を使用してエラーを追跡します。 (この方法は Tomcat や他のサービスの設定にも使用できますが、後で詳しくは説明しません)

# strace -f -o /tmp/nginx.strace chroot /nginx /usr/local/nginx/sbin/nginx -t 
ログイン後にコピー
strace のインストールが必要な場合があります。
ステートメントを実行すると、/tmp/nginx.strace ファイルにいくつかのトレースが記録されます。

環境を構築しているときに、ファイルに特定のパッケージが欠落していることに気づき、それをchrootjailに追加したところ、正常に起動しました。

3. Tomcat で chroot ジェイルを設定します

3.1. chroot ジェイルのルート ディレクトリを作成します。

# mkdir /home/tomcat/jail
ログイン後にコピー
3.2. chroot jam ディレクトリ構造を作成します。

# cd /home/tomcat/jail
# mkdir -p lib lib64 etc tmp dev usr
# chmod 755 etc dev usr
# chmod 1777 tmp
ログイン後にコピー
# cp -a /etc/hosts etc/hosts
ログイン後にコピー

3.3. Java 環境をインストールし、root でインストールした環境を chroot にコピーします。

# mkdir -p usr/java
# cp -a /usr/java/jdk1.7.0_67 usr/java
ログイン後にコピー

3.4. java の依存ライブラリを検索してコピーします

# ldd /usr/java/jdk1.7.0_67/bin/java
	linux-vdso.so.1 =>  (0x00007fff532d1000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc36c8f2000)
	libjli.so => /usr/java/jdk1.7.0_67/bin/../lib/amd64/jli/libjli.so (0x00007fc36c6da000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fc36c4d6000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fc36c142000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fc36cb17000)
ログイン後にコピー
は、lib64 内の上記の 4 つのライブラリをコピーするだけで、JVM に必要な 2 つのライブラリもコピーする必要があります:

# cp -p /lib64/libm.so.6 lib64/
# cp -p /lib64/libnsl.so.1 lib64/
ログイン後にコピー

3.5。 chroot を実際の root 環境に近づけるには、まだいくつかの作業が必要です。

/dev とそのサブキーを作成します:

# cd /home/tomcat/jail
# mkdir -p /home/tomcat/jail/dev/pts
# /dev/MAKEDEV -d /home/tomcat/jail/dev null random urandom zero loop* log console
# cp /dev/MAKEDEV /home/tomcat/jail/dev
# cp -a /dev/shm /home/tomcat/jail/dev/
ログイン後にコピー

3.6. /proc をマウントします。

# mkdir -p /home/tomcat/jail/proc
# mount -t proc proc /home/tomcat/jail/proc
ログイン後にコピー
このステップをマウントすると、chroot で Java を使用できるようになり、chroot に入り、次のコマンドでテストできます:

bash-4.1# /usr/java/jdk1.7.0_67/bin/java -version
ログイン後にコピー
。 。前提条件は、chroot で bash と sh のコピーをすでに作成していることです。それともやっぱりこの3。
以下の 3 つのファイルをコピーします。必要がない場合はコピーしないようにしてください。 。サービスは最小限に抑えられています。 。

cp -a /etc/{hosts,resolv.conf,nsswitch.conf} /home/tomcat/jail/etc/ 
ログイン後にコピー

また、名前付きサポートを備えた 3 つの依存ライブラリをコピーする必要があります

cp -p /lib64/libresolv.so.2 lib64/
cp -p /lib64/libnss_dns.so.2 lib64/
cp -p /lib64/libnss_files.so.2 lib64/
ログイン後にコピー

その後、/bin/bash と /bin/sh を chroot します。1.x を参照してください。このうち sh は centos の bash のソフト接続です。

この手順の後、java は chroot で動作できるようになり、問題が発生した場合は strace を使用してトラブルシューティングを行います。

Java 実行環境がセットアップされたら、Tomcat の構成を開始します。

3.8.tomcatのインストール構成。

Tomcat は通常、インストールする必要はありません。解凍パッケージをダウンロードし、chroot ディレクトリに解凍します。

私はjailのルートディレクトリに直接圧縮しました。

実行してみると、次の結果が得られます:

bash-4.1# /apache-tomcat-7.0.57/bin/catalina.sh start                      
/apache-tomcat-7.0.57/bin/catalina.sh: line 102: uname: command not found
/apache-tomcat-7.0.57/bin/catalina.sh: line 122: dirname: command not found
Cannot find //bin/setclasspath.sh
This file is needed to run this program
ログイン後にコピー
は、2 つのバイナリ ファイル uname と dirname および依存ライブラリをコピーする必要があります。方法は bash と同じです。

# cp /bin/uname bin/
# mkdir usr/bin
# cp /usr/bin/dirname usr/bin
ログイン後にコピー

Tomcat の実行中に、まだ小さな問題があることがわかりました:

bash-4.1# /apache-tomcat-7.0.57/bin/catalina.sh start
/apache-tomcat-7.0.57/bin/catalina.sh: line 203: tty: command not found
Using CATALINA_BASE:   /apache-tomcat-7.0.57
Using CATALINA_HOME:   /apache-tomcat-7.0.57
Using CATALINA_TMPDIR: /apache-tomcat-7.0.57/temp
Using JRE_HOME:        /usr/java/jdk1.7.0_67
Using CLASSPATH:       /apache-tomcat-7.0.57/bin/bootstrap.jar:/apache-tomcat-7.0.57/bin/tomcat-juli.jar
/apache-tomcat-7.0.57/bin/catalina.sh: line 368: touch: command not found
Tomcat started.
ログイン後にコピー
はさらにいくつかのことを追加しました:
# cp -p /lib64/librt.so.1 lib64/
# cp /usr/bin/tty usr/bin/
# cp /bin/touch bin/
ログイン後にコピー
このようにして、Tomcat は chroot コンテナ内で通常どおり実行できます。


起動時に自動的に開始するように設定し、rc.local の最後に追加します:

export JAVA_HOME=/usr/local/java/jdk1.7.0_25
export JRE_HOME=$JAVA_HOME/jre
mount -t proc proc /home/tomcat/jail/proc &>/dev/null
/usr/sbin/chroot /home/tomcat/jail /usr/tomcat/bin/catalina.sh start
ログイン後にコピー
この Java パスに注意してください。root と chroot は一貫している必要があります。

参考:

[1] 3.13 Chroot Jailの構成と使用 第3章 リリース6用Oracle Linuxセキュリティ・ガイドの実装

[2] Linux nginx: Chroot (Jail) Setup by NIXCRAFT

[3] Tomcat: The Definitive Guide: The Definitive Guide by Jason Brittain、Ian F. Darwin

上記は、chroot (jail) を使用した nginx と Tomcat の関連する設定を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート