Firejailを使用して、Jailed環境でWordPressインストールをセットアップする方法

前書き

一般に公開されているWebサーバーを実行している場合、コンテンツをアクセス可能にすることと、安全な構成を確立することとのバランスをとることが難しくなる場合があります。 注意深い精査の対象とすべきさまざまな分野があります。 これらの1つはプロセスの分離と可視性です。

  • firejail *と呼ばれるプロジェクトは、カーネルネームスペースを利用して分離ポリシーを実施する軽量のセキュリティコンテナー化メカニズムを提供することにより、この分野での支援を目指しています。 これにより、chroot環境が非常に軽量になります。

このガイドでは、プロセスを独自のchroot環境で分離するためにfirejailを使用する方法を示します。 これを実際の例で示すために、2つのchroot環境をセットアップします。1つはWordPressを提供するNginx Webサーバーで、もう1つはサイトデータを処理するMySQLデータベースで構成します。 これらの2つのインスタンスには独自のファイルシステムとインストールがあり、ブリッジネットワークデバイスを介して通信します。

前提条件と目標

このガイドでは、64ビットUbuntu 14.04サーバーを基本インストールとして使用します。 これにより、ビルド済みの `+ firejail +`パッケージを利用できるようになり、chroot環境を簡単に作成できるようになります。

インストールの適切なベースを取得するには、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [Ubuntu 14.04の初期サーバーセットアップ]を完了していることを確認してください。ここに。

ホストシステムに2つのchroot環境をセットアップします。 これらは実際にはDebianの安定した環境であり、Debian環境は使用する `+ debootstrap +`ツールでよりよくテストされているため、選択されています。

ホストマシンはパブリックIPアドレスで構成され、刑務所と通信するために設定するブリッジネットワークのゲートウェイとして機能します。 ジェイルされた環境は、ブリッジインターフェイスを利用するようにのみ構成され、ホスト上のNATルールを介してより広いインターネットにのみアクセスできます。

構成する3つの環境には、次のプロパティがあります。

Environment Public IP Address Bridge IP Address

Host

10.10.20.1

Web Server

(none)

10.10.20.10

Database Server

(none)

10.10.20.20

上記の赤の値は、ホストサーバーのパブリックIPアドレスに置き換える必要があることに注意してください。 ただし、ガイド全体でこのインターフェイスとこれらのアドレスを設定するため、ブリッジのIPアドレスはそのまま使用する必要があります。

このガイド全体で、すべてのコマンドは* root *ユーザーとして実行されます。

ホストマシンコンポーネントのダウンロードと構成

開始するには、使用するツールの一部をサーバーにダウンロードする必要があります。

まず、firejailプログラム用の `+ .deb `パッケージをダウンロードする必要があります。 http://sourceforge.net/projects/firejail/files/firejail/ [サイトのダウンロードページ]で最新の ` .deb +`パッケージ名を見つけ、以下のURLのファイル名部分をそのバージョンに置き換えます。 以下のURLは、パッケージへの直接ダウンロードリンクです。

cd ~
wget http://downloads.sourceforge.net/project/firejail/firejail/

ファイルがダウンロードされたら、 `+ dpkg +`を使用してインストールします。

dpkg -i firejail*

firejailプログラムをインストールした後、Ubuntuのデフォルトリポジトリから追加のパッケージを取得する必要があります。 具体的には、chrootファイルシステムの作成に役立つ `+ debootstrap `ツールと、jailが通信に使用するネットワークブリッジインターフェイスを作成できる ` bridge-utils +`が必要です。

apt-get update
apt-get install debootstrap bridge-utils

ブリッジインターフェイスを構成する

実際の刑務所に入る前に、ブリッジネットワークインターフェースをセットアップします。

`+ bridge-utils `パッケージの一部であった ` brctl `コマンドで新しいインターフェースを作成できます。 ブリッジは「 br0 +」と呼ばれます:

brctl addbr br0

次に、インターフェイスを起動する必要があります。 インターフェイスのアクティブ化に加えて、CIDRネットワーク範囲を割り当てています。 ホストサーバーのアドレスは、このインターフェイスで* 10.10.20.1 *になります。

ifconfig br0 10.10.20.1/24

インターフェースが稼働している状態で、インターフェース間でIP転送またはルーティングを許可するようカーネルに指示する必要があります。 次のように入力して、このセッションでこの機能を有効にできます。

echo "1" > /proc/sys/net/ipv4/ip_forward

ここで、ホストサーバー上のポート80宛てのトラフィックを、刑務所の1つにインストールするWebサーバーにルーティングできるようにする「+ iptables +」ルールを設定する必要があります。 Webサーバーのブリッジインターフェイスには、* 10.10.20.10 *のIPアドレスがあります。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.10.20.10:80

これにより、「nat」テーブルの「PREROUTING」チェーンの下部にルールが追加されます。 ポート80宛てのTCPパッケージがヒットすると、トラフィックはネットワークアドレス変換を介して「10.10.20.10」のポート80にリダイレクトされます。

また、データベースとWebサーバーがWordPressからコンポーネントを更新できるようにインターネットを照会できるようにする一連のルールを設定する必要があります。 `+ br0 +`インターフェースがホストマシンを介して通信を正常にルーティングできるようにするマスカレードルールを追加することから始めます。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

次に、FORWARDチェーンのルールを調整して、インターフェイス間の通信をロックダウンできます。

最初に、ポート80から「+ br0 +」ネットワークへのトラフィックを明示的に許可できるように、確立された以前のNATルールをミラーリングする必要があります。

iptables -A FORWARD -i eth0 -o br0 -p tcp -m tcp --dport 80 -j ACCEPT

また、確立された接続に関連する着信トラフィックを許可します。

iptables -A FORWARD -i eth0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT

刑務所が互いに、そして外の世界と通信するために、 `+ br0 +`インターフェースから発信されるすべてのトラフィックの転送を許可したい:

iptables -A FORWARD -i br0 -j ACCEPT

最後に、転送が「+ br0 +」ネットワークからの送信接続に対してのみ許可されるように、他のすべての転送接続をドロップします。 このポリシーの例外は、前述のルールで既に確立されています。

iptables -P FORWARD DROP

これで、ホストシステムは、ジェイルされた環境との通信に使用するブリッジインターフェイスで構成されます。

Chrootディレクトリ構造を作成する

これで、chrootディレクトリ構造を作成する準備が整いました。

前に言ったように、Webサーバーとデータベースサーバーは完全に別のファイルシステムで動作します。 これらのファイルシステムは両方とも `+ / jails +`というディレクトリ内に保持します。 今すぐそのディレクトリを作成します。

mkdir /jails

作成したディレクトリに移動します。

cd /jails

次に、ジェイルされたオペレーティングシステムで使用されるファイル構造を作成する必要があります。 これを行うには、 `+ debootstrap +`ツールを使用します。 このユーティリティは、既存のファイルシステム内のDebian環境をブートストラップするために作成されました。 これを行うには、Debianリポジトリからパッケージを取得し、正しい場所に「インストール」します。

Ubuntu環境のブートストラップには「+ debootstrap +」を使用できますが、代わりに安定したDebianインストールを選択します。 このツールはDebianで動作するように作成されているため、これらの環境はこのツールで最もよくテストされています。

データベース環境を「db」というディレクトリにインストールします。 適切なディレクトリ構造を作成し、必要なパッケージをダウンロードしてインストールするには、次のように入力します。

debootstrap --arch=amd64 stable db

`+ / jails / db `ディレクトリの下にファイルシステムを構築したので、 ` rsync +`を使用して、Webサーバーが使用できる別のディレクトリに構造をコピーできます。 新しいディレクトリは「www」と呼ばれます。 次のコマンドのスラッシュ(/)に注意してください。 これにより、ディレクトリ自体をコピーする代わりに、最初のディレクトリの_contents_が2番目のディレクトリにコピーされます。

rsync -azvh db/ www

これで、 `+ firejail +`プログラムで使用できる2つのchrootディレクトリ構造ができました。

Firejailを使用してWordPressデータベースをセットアップする

ディレクトリ構造ができたので、 `+ firejail `を使用して ` / jails / db +`ディレクトリ構造内にchroot環境を作成できます。

chroot環境を作成して内部でbashセッションを開始するには、chrootルートのディレクトリの場所とセッションに使用するホスト名を指定するだけです。

firejail --chroot=/jails/db --name=db
Parent pid 17390, child pid 17391
Interface           IP                  Mask                Status
lo                  127.0.0.1           255.0.0.0           UP
eth0                192.0.2.1           255.255.255.0       UP
eth1                10.128.1.228        255.255.0.0         UP
br0                 10.10.20.1          255.255.255.0       UP

Child process initialized
[root@db ~]$

このコマンドは、親pid、子pid、およびこのjailセッション内で構成されているインターフェイスを出力します(この時点ではインターフェイスを制限または構成していません)。 その後、投獄された環境内のコマンドプロンプトにドロップされます。

最初に行う必要があるのは、パッケージデータベースを更新し、chroot環境内にMySQLサーバーをインストールすることです。 次のように入力して、それを行うことができます。

apt-get update
apt-get install mysql-server

更新プロセス中に、Debianリポジトリがチェックされていることがわかります。 これは、chroot環境がDebianインストールであるためです。

インストールプロセス中に、ルートMySQLアカウントのパスワードを選択して確認するように求められます。

インストールが完了したら、次のように入力してMySQLデータのディレクトリ構造を生成する必要があります。

mysql_install_db

次に、含まれるスクリプトを使用して、いくつかの安全でないデフォルトをロックダウンします。

mysql_secure_installation

インストール中に設定したルートMySQLパスワードの入力を求められます。 その後、パスワードを変更するかどうかを尋ねられます。 選択に満足したら「いいえ」を選択します。 残りのプロンプトについては、Enterキーを押してデフォルトの選択肢を選択します。

WordPressデータベースとユーザーを作成する

次に、WordPress用に個別のデータベースをセットアップします。 MySQLルートアカウントを使用してMySQLサーバーにログインします。 プロンプトが表示されたら、そのユーザーに対して選択したパスワードを入力します。

mysql -u root -p

MySQLプロンプトが表示されます。 WordPressが使用する新しいデータベースを作成します。

CREATE DATABASE wordpress;

次に、Webサーバーjailからこのデータベースを操作するユーザーを作成します。 WebサーバーのブリッジインターフェースのIPアドレスは* 10.10.20.10 *になるため、このユーザーをそのアドレスに関連付ける必要があります。 このユーザーに安全なパスワードを割り当てます。 次に、このユーザーに、作成したデータベースを操作する権限を付与します。

CREATE USER 'wordpressuser'@'10.10.20.10' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'10.10.20.10';

ここで、権限テーブルをフラッシュして終了するだけです。

FLUSH PRIVILEGES;
exit

MySQL設定を変更してブリッジアドレスにバインドする

次に、MySQL構成ファイルを変更する必要があります。 今すぐエディターで開きます:

nano /etc/mysql/my.conf

このファイルはセクションに編成されています。 次のように始まるセクションを見つけます。

[mysqld]

現在、「+ 127.0.0.1+」に設定されている「+ bind-address +」というディレクティブが表示されます。 ブリッジインターフェイスでリッスンするMySQLインスタンスを起動します。 このインターフェースのこの刑務所の住所は* 10.10.20.20 *になるため、次のように変更する必要があります。

bind-address = 10.10.20.20

完了したら、ファイルを保存して閉じます。

これで、現在実行中のMySQLインスタンスを停止して、このjailを終了できます。

service mysql stop
exit

Firejailを使用してWordPress Webサーバーをセットアップする

データベースが構成されたので、Webサーバーに使用されるjailに移動できます。 firejailを使用して、このjail環境でセッションを今すぐ開始します。

firejail --chroot=/jail/www --name=www

最初に行う必要があるのは、ローカルパッケージデータベースを更新し、Nginx WebサーバーとPHPコンポーネントをインストールすることです。 これらは、動的リクエストを処理し、MySQLデータベースに接続するために必要です。

apt-get update
apt-get install nginx php5-fpm php5-mysql

PHPの構成

まず、PHPプロセッサの構成ファイルを編集して、セキュリティ上の問題になる可能性のある機能を無効にします。

nano /etc/php5/fpm/php.ini

ファイルで `+ cgi.fix_pathinfo +`ディレクティブを探します。 コメントアウトされ、「1」に設定されます。 コメントを外し、「0」に変更する必要があります。

cgi.fix_pathinfo=0

完了したら、ファイルを保存して閉じます。

Nginxの構成

次に、WordPressファイルを正しく提供するためにNginxをセットアップする必要があります。 これには、 + / var / www / html`に新しいドキュメントルートを確立し、ホストシステムのパブリックIPアドレスに + server_name _`を設定し、PHP処理を構成することが含まれます。

デフォルトのNginx構成ファイルを開きます。

vim /etc/nginx/sites-available/default

行う必要がある変更の概要は次のとおりです。

  • ポート番号を明示的に指定するには、 `+ listen 80 +`ディレクティブのコメントを外します。

  • `+ root `ディレクティブの値を、WordPressファイルを保持する場所である ` / var / www / html +`を指すように変更します。

  • + index`パラメータを変更して、他のインデックスファイルの前に + index.php`ファイルを探します。

  • 「+ server_name +」ディレクティブの値を変更して、*ホストサーバーのIPアドレスまたはドメイン*を指すようにします

  • + try_files`ディレクティブの最後の値を調整して、ファイルまたはディレクトリとして見つからない場合にリクエストを + index.php`ファイルに渡すようにします。 これは、 `+ location / +`ブロック内にあります。

  • エラーページを許可するには、すべてのエラーページディレクティブのコメントを外します。

  • + location〜\ .php $ +`ブロック、含まれている `+ fastcgi_split_path_info +`ディレクティブ、 `+ fastcgi_pass + * socket *行、 `+ fastgci_index `および ` include fastcgi_params `ディレクティブのコメントを解除し、 ` try_files + `ディレクティブは、指定された要求を試行し、それ以外の場合は404を返します。

上記の変更を完了すると、ファイルは次のようになります(簡潔にするためにコメントは削除されています)。

server {
   listen 80;
   root ;
   index  index.html index.htm;
   server_name ;
   location / {
       try_files $uri $uri/ ;
   }
   location /doc/ {
       alias /usr/share/doc/;
       autoindex on;
       allow 127.0.0.1;
       allow ::1;
       deny all;
   }
   error_page 404 /404.html;
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
       root /usr/share/nginx/www;
   }
   location ~ \.php$ {

       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index index.php;
       include fastcgi_params;
   }
}

簡単な場合は、ここに表示されている内容全体を貼り付けることができます。 ホストシステムのパブリックIPアドレスまたはドメイン名を参照するために、 `+ server_name`ディレクティブを調整するだけです。

完了したら、ファイルを保存して閉じます。

WordPressファイルのダウンロードと設定

Nginxがファイルを正しく提供するように構成されたので、ファイルをダウンロード、構成、およびインストールできます。

ルートユーザーのホームディレクトリに変更し、最新のWordPress tarballをダウンロードすることから始めます。

cd ~
wget http://wordpress.org/latest.tar.gz

tarballの内容を抽出し、 `+〜/ wordpress +`というディレクトリを作成します:

tar xzvf latest.tar.gz

サンプル構成ファイルを、チェックされる有効な構成ファイル名にコピーします。

cd ~/wordpress
cp wp-config-sample.php wp-config.php

次に、テキストエディターで新しい構成ファイルを開きます。

nano wp-config.php

内部では、データベースストレージに関連付けられている値を変更する必要があります。 MySQLデータベースで行った選択の詳細を設定オプションに入力する必要があります。

以前に独自の値に変更する必要があるパスワードフィールドを除き、以下に示す値を使用できます。

/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpressuser');

/** MySQL database password */
define('DB_PASSWORD', '');

/** MySQL hostname */
define('DB_HOST', '10.10.20.20');

終了したら、ファイルを保存して閉じます。

次に、Nginx構成ファイルでドキュメントルートとして参照した `+ / var / www / html`ディレクトリを作成する必要があります。 次に、すべてのWordPressファイルをそのディレクトリにコピーします。

mkdir -p /var/www/html
cp -r ~/wordpress/* /var/www/html

これで、ファイルの所有権をWebユーザーに付与できます。

cd /var/www/html
chown -R www-data:www-data /var/www/html/*

これで、Webサーバーの刑務所が完全に構成されました。 次のように入力して、WebサーバーとPHPプロセスを正常にシャットダウンできます。

service nginx stop
service php5-fpm stop

ここで、jailを終了してホストサーバーセッションに戻ります。

exit

刑務所の開始

これで、刑務所が完全に設定されました。 ネットワークブリッジインターフェイスで個別に起動できます。

まず、データベースサーバーが簡単なので、データベースサーバーを起動します。 前と同じようにchrootルートの場所を指定する必要があります。 今回は、 +-net +`パラメーターを使用してブリッジインターフェースを指定します。 これを `+-ip +`パラメータと組み合わせて使用​​して、このjailに付与する正確なアドレスを指定します(設定から思い出すと、 `+ 10.10.20.20 +)。

また、jail内に新しい + / tmp、` + / root`、および + / home / user`ディレクトリをマウントするために、 +-private + `フラグを渡します。 次に、刑務所で開始するプロセスを指定し、末尾に「&」を付けてバックグラウンドに配置する必要があります。

開始する必要があるプロセスは、MySQLサーバープロセスであり、「+ sleep inf +」プロセスでもあります。 これにより、前のプロセスが完了したときに終了する代わりに、jailが無期限に実行され続けます。 合計すると、コマンドは次のようになります。

firejail --chroot=/jails/db --private --net=br0 --ip=10.10.20.20 \
   "/etc/init.d/mysql start; \
   sleep inf" &

jailが起動し、指定されたプロセスが順番に実行され始めます。 このプロセスの結果は、 + firejail`の +-list`オプションを使用して確認できます。

firejail --list
21913:root:firejail --chroot=/jails/db --private --net=br0 --ip=10.10.20.20 /etc/init.d/mysql
 21916:root:bash -c /etc/init.d/mysql start; sleep inf
   21970:root:/bin/sh /usr/bin/mysqld_safe
     22322:syslog:/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/
     22323:root:logger -t mysqld -p daemon.error
   22409:root:sleep inf

ご覧のとおり、プロセスツリーはホストシステムから利用できます。 `+ sleep inf +`が実行され、MySQLプロセスがまだ起動しているのを見ることができるため、jailの起動が完了したことがわかります。

Webサーバーのjailの場合、同じ基本セットアップが必要です。 chrootルートの場所、ブリッジされたインターフェース、割り当てられている実際のIPアドレス( + 10.10.20.10 +)、および `+-private +`フラグを指定する必要があります。

プロセスリストに関して、追加の考慮事項がいくつかあります。 まず、jail内の `+ / var / log +`ディレクトリが各起動時に動的に作成されます。 このため、Nginxファイル内のログディレクティブは存在しない場所を指します。 Nginxを起動する前に、これらの場所を作成できます。

また、Nginxプロセスはシステムロガーに依存しています。 Nginxの前に `+ rsyslog `プロセスも起動します。 Nginxを起動した後、必要に応じてデータベースjailにリクエストを渡すPHPプロセッサを起動することも忘れないでください。 繰り返しますが、サービスが開始されたポイントを超えて刑務所が存続するように、 ` sleep inf +`で終了します。

最終的に、Webサーバーjailを起動するコマンドは次のようになります。

firejail --chroot=/jails/www --private --net=br0 --ip=10.10.20.10 \
   "mkdir -p /var/log/nginx; \
   touch /var/log/nginx/error.log; \
   touch /var/log/nginx/access.log; \
   /etc/init.d/rsyslog start; \
   /etc/init.d/nginx start; \
   /etc/init.d/php5-fpm start; \
   sleep inf" &

Webサーバーのjailが起動するまで少し時間がかかる場合があります。プロセスが `+ sleep inf `状態に到達するかどうかを確認するには、 ` firejail --list +`でチェックを続けます。

これで、WebブラウザでホストサーバーのパブリックIPアドレスまたはドメイン名にアクセスすると、WordPressの初期インストールページが表示されます。

http://

image:https://assets.digitalocean.com/articles/firejail/wp_install.png [WordPress初期インストール画面]

適切な値を入力し、準備ができたら下部の[WordPressのインストール]をクリックします。 新しく作成した管理アカウントでログインする必要があります。 その後、WordPressダッシュボードに移動します:

画像:https://assets.digitalocean.com/articles/firejail/wp_dashboard.png [WordPressダッシュボード]

ここですべてが期待どおりに機能する場合、インストールが成功したことを意味します。 これで、この構成を反復可能かつ永続的にすることができます。

Firejailインスタンスサービスの作成

構成が実行されたので、再起動後に簡単にここに戻ることができるようにします。 これを行うには、対処する必要があるいくつかの領域があります。 これらが含まれます:

  • 起動時に起動するようにホストから刑務所および刑務所から刑務所へのネットワークを構成します。

  • 「+ iptables」の変更を永続的にする。

  • ホストサーバーの起動時にjailが自動的に起動するように構成します。

これら3つをすぐに開始できます。

起動時のJailsのネットワークの構成

最初に焦点を当てるのは、ブリッジネットワークを稼働させることです。 これは、ファイアウォールルールを心配する前、およびジェイル環境を開始する前に必要です。

実際のブリッジ接続を設定する必要があります。 この接続を起動時に実行するには、 `+ / etc / network / interfaces +`ファイルを変更する必要があります。 今すぐこのファイルを開きます。

nano /etc/network/interfaces

内部には、起動時に開始されるインターフェイスを指定するセクションと、各インターフェイスを説明する他の行が表示されます。 ブート時に定義するインターフェイスを開始するために、2番目の「+ auto 」行の最後に「 br0 +」ネットワークを追加することから始めます。

auto eth0 eth1

次に、インターフェイスを定義するセクションを設定する必要があります。 これはブリッジインターフェースであり、2つのネットワークを結合する従来のブリッジのようには機能しないため、インターフェースを手動で定義します。つまり、ネットワークの構成に使用する必要のある正確なコマンドを指定します。

セクションヘッダーから開始します。

iface br0 inet manual

この下で、 + pre-up ++ up ++ post-down +、および `+ down `ディレクティブを使用して、各ステージで実行するコマンドを定義します。 ` pre-up `および ` up `コマンドの場合、ブリッジを作成してから、以前手動で行ったのと同じ方法でインターフェースを起動します。 コマンドの実行時に、「 $ IFACE 」は「 br0 +」に動的に置き換えられるため、ここで変更しないでください。

iface br0 inet manual
   pre-up brctl addbr $IFACE
   up ifconfig $IFACE 10.10.20.1/24

`+ post-down `および ` down +`コマンドについては、単にこれらのコマンドを逆にしたいだけです。 インターフェイスを再びダウンさせてから、ブリッジを削除します。

iface br0 inet manual
   pre-up brctl addbr $IFACE
   up ifconfig $IFACE 10.10.20.1/24
   down ifconfig $IFACE down
   post-down brctl delbr $IFACE

`+ br0 +`インターフェースが定義され、ブート時に自動的に起動するように設定しました。 完了したら、ファイルを保存して閉じます。

刑務所への制限付き転送を許可するためのIPTablesのセットアップ

次に、先ほど追加したルールでiptablesをセットアップする必要があります。 幸いなことに、これは `+ iptables-persistent +`パッケージの助けを借りれば簡単です。

次を入力してパッケージをインストールします。

apt-get install iptables-persistent

インストールプロセス中に、現在のIPv4およびIPv6ルールのセットを保存するかどうかを尋ねられます。 これらのプロンプトで[はい]を選択すると、現在のルールセットが自動的に保存されます。 これらはブート時に自動的に再適用されます。

ブート時に適用されるルールを調整する必要がある場合は、使用する変更を行ってから、次のように入力します。

/etc/init.d/iptables-persistent save

現在のルールセットが更新されます。

これで、サーバーの起動時にiptablesルールが元に戻されるように設定されました。 ただし、まだ対処していない部分がもう1つあります。カーネルが転送を許可していることを確認する必要があります。

以前は、この機能を有効にするために、「+ / proc 」擬似ファイルシステムのファイルに「1」をエコーし​​ました。 この変更を次回起動時に自動的に行うには、 ` sysctl.conf +`ファイルを編集します:

nano /etc/sysctl.conf

次の行のコメントを解除します。

net.ipv4.ip_forward=1

完了したら、ファイルを保存して閉じます。

WordPressの刑務所を開始するためのUpstartスクリプトを作成する

起動時にjailを起動するように設定するには、upstartスクリプトを作成する必要があります。 スクリプトを「+ firejail_wp.conf +」と呼びます。

テキストエディタの `+ / etc / init +`ディレクトリでこの名前のファイルを開きます:

nano /etc/init/firejail_wp.conf

内部では、最初にこのサービスの目的の簡単な説明を記入します。

description "WordPress jail"

次に、このサービスが自動的に開始するために必要な状況を構成します。 ファイルシステムが利用可能であることを確認したいと思います。また、 `+ br0 `ネットワークが確立されていることを確認する必要があります。 ` br0 +`ネットワークがダウンしている場合、両方のfirejailコマンドは失敗します。

これを行うには、 `+ start on `ディレクティブと ` local-filesystems `および ` net-device-up +`指定子を使用して開始条件を構築します。 また、マシンが再起動またはシャットダウンモードになったときに停止するようにスクリプトを構成します(1〜5以外のランレベルで示されます)。

description "WordPress jail"

start on (local-filesystems and net-device-up IFACE=br0)
stop on runlevel [!12345]

最後に、このサービスが開始されたときに実行される実際のコマンドを確立する必要があります。 サービスの実行方法により、firejailコマンドを外部スクリプトに配置するため、ここでスクリプト名を参照するだけです。

description "WordPress jail"

start on (local-filesystems and net-device-up IFACE=br0)
stop on runlevel [!12345]

exec /startjails.sh

終了したら、ファイルを保存して閉じます。

次に、参照した実際のスクリプトファイルを作成する必要があります。 テキストエディタを使用して、次の場所でファイルを開きます。

nano /startjails.sh

これはbashスクリプトであるため、bashの標準的なshebang呼び出しから始めます。

#!/bin/bash

次に、1つの小さな変更を加えて、2つのfirejailコマンドを追加します。 不明な理由により、upstartによって起動されたときに、jail化された環境内でNginx initスクリプトを実行すると問題が発生します。 他の方法で呼び出された場合、この問題は発生しません。

これを回避するために、内部jail化されたinitスクリプトの代わりにNginx実行可能ファイルを呼び出すだけです。 それ以外は、コマンドは以前に使用したとおりです。

#!/bin/bash

firejail --chroot=/jails/db --private --net=br0 --ip=10.10.20.20 "/etc/init.d/mysql start; sleep inf" &

firejail --chroot=/jails/www --private --net=br0 --ip=10.10.20.10 "mkdir -p /var/log/nginx; touch /var/log/nginx/error.log; touch /var/log/nginx/access.log; /etc/init.d/rsyslog start; /usr/sbin/nginx; /etc/init.d/php5-fpm start; sleep inf" &

これが、刑務所の開始直後に終了するタスクではなく、継続的なサービスであることを確認するには、もう1つのコマンドが必要です。 スクリプトの最後の行として「+ sleep inf +」を追加する必要があります。 これにより、upstartはサービスを正しく管理できます。

#!/bin/bash

firejail --chroot=/jails/db --private --net=br0 --ip=10.10.20.20 "/etc/init.d/mysql start; sleep inf" &

firejail --chroot=/jails/www --private --net=br0 --ip=10.10.20.10 "mkdir -p /var/log/nginx; touch /var/log/nginx/error.log; touch /var/log/nginx/access.log; /etc/init.d/rsyslog start; /usr/sbin/nginx; /etc/init.d/php5-fpm start; sleep inf" &

sleep inf

終了したら、ファイルを保存して閉じます。

ここで、このファイルを実行可能にするだけで、upstartスクリプトが起動できるようになります。

chmod +x /startjails.sh

この手順により、WordPressのジェイル環境はブート時に起動するように完全に設定されます。

ホストサーバーを再起動して、これを試すことができます。

shutdown -r now

すべてが正しく構成されていれば、すべてが起動する時間が経過した後、WordPressサイトにアクセスできます。

結論

このガイドは、Firejailのようなツールでできることの1つにすぎません。 サーバーに分離されたコンポーネントを設定する方法は他にもたくさんありますが、firejailは最小限のリソースで非常に多くの異なるシナリオを処理できる柔軟性と能力を備えているため、優れたソリューションです。