Debian 9上でApache+PassengerでRoRの公開環境をつくる

Debian 9 "Stretch" を用いたサーバ設定メモ - 発声練習Debian 9上でrbenvをシステムワイドにインストールする - 発声練習の続き。

目的

  • 複数のRuby on Railsアプリの公開できるようにする
  • Apache + Passengerで構築する
  • iptableで不要なポートを閉じる

iptableで不要なポートを閉じる

Debian 9 "Stretch" を用いたサーバ設定メモ - 発声練習にてすでに閉じている。40080, 400081をアプリ用に公開する。/etc/iptables/rule.v4に以下を追加する。

-A INPUT -p tcp -m tcp --dport 40080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 40081 -j ACCEPT

反映させる。

% sudo iptables-restore < /etc/rules.v4

確認する。

% sudo iptables -L | grep 400

ApacheとPassengerのインストール

Installing Passenger + Apache on Debian 9 (with APT) - Passenger LibraryにしたがってPassengerをインストールする。

Passengerをaptでインストールできるように設定する。GPG鍵の登録。

% sudo apt-get install -y dirmngr gnupg
% sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
% sudo apt-get install -y apt-transport-https ca-certificates

/etc/apt/source.listに追加する。

% sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger stretch main > /etc/apt/sources.list.d/passenger.list'
% sudo apt-get update

PassengerおよびApacheモジュールのインストール。

% sudo apt-get install -y libapache2-mod-passenger
% sudo apt-get install -y apache2-dev  (passengerで使うapxs2のインストール)

Apacheにモジュールを付け加える。

% sudo a2enmod passenger
% sudo apache2ctl restart

正しくインストールできているかどうかを確かめる。Apacheを使う方を選ぶ。

sudo /usr/bin/passenger-config validate-install

PassengerInstanceRegistryDirを設定する。

% sudo mkdir -p /var/run/passenger-instreg

Debian 9では /var/runは tmpfsとして設定されているため、そのままだと再起動の度に削除されてしまう(参考:/var/run の中身が再起動すると消えてしまうので・・・お前らもさっさとハマって泣くべきCentOS7の落とし穴4つ - Qiita)。そこで、 /etc/tmpfiles.d に設定を記載する。

% sudo touch /etc/tmpfiles.d/passenger.conf

/etc/tmpfiles.d/passenger.confの中見は以下のとおりにする。

d /var/run/passenger-instreg 0755 root root

rootのホームディレクトリ(/root)のシェルの設定ファイルに上記の添付ファイルに関する設定を記述する。たとえば、.bash_profileに以下を記述する。以下の例では合わせてRailsの実行モードについても記載する。

export PASSENGER_INSTANCE_REGISTRY_DIR=/var/run/passenger-instreg
export RAILS_ENV=production

railsのソースファイルが/home/hogehoge/rails-serverとし、http://hogehoge.net/rails/でアクセスできるようにするとき、シンボリックリンクをはる。Debian8からはApacheのデフォルトが/var/www/htmlになっているのでその下に置く。

% sudo ln -s  /home/hogehoge/rails-server/public /var/www/html/rails

Apacheの設定

/etc/apache2/ports.conf に新しく開けたポートの記述を追加する。

Listen 40080
Listen 40081

ポート番号40080でアクセスする設定を/etc/apache2/sites-available/001-vhost1.confとして設定する。以下の設定ファイルでSECRET_KEY_BASEの環境変数を定義しているのは、passenger経由だとユーザディレクトリの設定ファイル(.bash_profileなど)で設定した環境変数が反映されないため(参考→tail -f pinzo.log: 本番環境での secret_key_base 設定)。

PassengerInstanceRegistryDir /var/run/passenger-instreg #上述のディレクトリ

<VirtualHost *:40080>
	ServerName サーバのFQDN

	ServerAdmin 連絡先メールアドレス
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
	CustomLog ${APACHE_LOG_DIR}/vhost2_access.log combined

	PassengerRuby /usr/local/rbenv/versions/2.4.2/bin/ruby # rbenvで導入したrubyを指定する
	PassengerFriendlyErrorPages off  #onにするとエラー時にログが表示される。
	
	SetEnv SECRET_KEY_BASE 「秘密鍵につかう文字列 bundle exec rails secret で生成」
	RackEnv production
	RackBaseURI /rails

</VirtualHost>

設定を反映させる。

% sudo a2ensite vhost1
% sudo systemctl reload apache2

Railsアプリを修正したとき

passengerを再起動する(参考:Restarting applications)。

% sudo passenger-config restart-app

2015年以降のインテルCPUの脆弱性チェックプログラム

やめて!
japanese.engadget.com

あるものはしょうがないので研究室の該当マシンをチェック。ただ、使い方がいまいちわからなかったのでメモ。

判定ツールの結果の解釈

判定ツールのファイルに含まれているドキュメント Intel-SA-00086_Detection_UG.pdf の9ページ表2.2を転載する。

Message(表示されるメッセージ) Meaning(意味)
Vulnerable(脆弱性あり) The detected version of the Management Engine firmware is considered vulnerable for INTEL-SA-00086.
Not Vulnerable (脆弱性なし) The system meets the “Not Vulnerable” criteria described in Identifying impacted systems using the INTEL-SA-00086 Detection Tool
Maybe Vulnerable (わからない) Tool could not communicate with the MEI/TXEI Driver. Platform vulnerability cannot be ascertained. (意訳:検出ツールがMET/TXEIドライバーにアクセスできなかった。このため、脆弱性があるのかどうか判定できなかった)
Unknown (超わからない) 意味省略

この検出ツールで困るのは、 MEI/TXEIドライバーにアクセスできなかったときに「Maybe Vulnerable」を出してくるところ。今回のCoreプロセッサーは第6~8世代(Skylake、Kaby Lake、Kaby Lake R)が対象なところ、試したのはCore i3 530(Nehalem 世代) で検出ツールを動かした結果「Maybe Vulnerable」と判定された。このため、古いPCを調べる場合は、対象のプロセッサーかどうかの判定も必要となる。

ダウンロード

Windows用でも、Linux用でもこちらのサイトからダウンロードできる。
downloadcenter.intel.com

WIndowsの場合

ダウンロードしたZIPファイルを解凍する。解凍したフォルダに移動する。さらに「DiscoveryTool.GUI」フォルダに移動する。
f:id:next49:20171124125358p:plain

以下のようなファイルがあるので「Intel-SA-00086-GUI.exe」を実行する(必要に応じて管理者権限で実行する。ファイルを選択し、右クリック「管理者として実行(A)」を選択する)。
f:id:next49:20171124125417p:plain

しばらくたつと結果が以下のように表示される。もし、「Vulnerable(脆弱性あり)」ならば、「モデル」の項に記載されているメーカーのWebサイトからファームウェアを探し、インストールする。「Not Vulnerable (脆弱性なし)」なら、問題なし。「Maybe Vulnerable (わからない)」であるならば、「プロセッサー名」の情報を参考に今回の脆弱性の対象CPUであるかどうかを調べる。たとえば、以下の例の場合はGoogleで「Core i3 530」と検索したところja.wikipedia:Intel Core i3のページが見つかり、530はNehalem 世代であるため、脆弱性対象の世代(Skylake、Kaby Lake、Kaby Lake R)ではないことが確認できた。
f:id:next49:20171124125427p:plain

Linux の場合

SA00086_Linuxtar.gzをダウンロードし、調べたいサーバに持っていく。ホームディレクトリにファイルを置いたとする。

% mkdir IntelCPUCheck
% cd IntelCPUCheck
% tar xvfz ~/SA00086_Linuxtar.gz

./documents/Intel-SA-00086_Detection_UG.pdf に説明がある。Linux版の実行にはPython 2.7が必要。pythonが存在するかどうかはwhichコマンドで確認できる(何も反応がなければpythonはインストールされていない)。pythonのバージョンは以下のように確認できる。

% which python
% python --version

ツールを実行する。

% sudo ./intel_sa00086.py

実行結果の例。

INTEL-SA-00086 Detection Tool
Copyright(C) 2017, Intel Corporation, All rights reserved

Application Version: 1.0.0.128
Scan date: 2017-11-24 03:20:37 GMT

*** Host Computer Information ***
Name:「サーバのホスト名」
Manufacturer: ASUS
Model: All Series
Processor Name: Intel(R) Xeon(R) CPU E3-1226 v3 @ 3.30GHz
OS Version: debian 8.9  (3.16.0-4-amd64)

*** Intel(R) ME Information ***
Engine: Intel(R) Management Engine
Version: 9.1.10.1005
SVN: 0

*** Risk Assessment ***
Based on the analysis performed by this tool: This system is not vulnerable.

For more information refer to the SA-00086 Detection Tool Guide or the Intel security advisory Intel-SA-00086 at the following link:
https://security-center.intel.com/advisory.aspx?intelid=INTEL-SA-00086&languageid=en-fr

関連リンク

  • HPのファームウェア
    • HPのファームウェアは機器ごとに対応している様子。HP Software and Driver Downloads for HP Printers, Laptops, Desktops and More | HP® Customer Supportのページに使用しているモデルの情報を入力してドライバーのダウンロードのページへ移動し、「Driver-Chipset」→「Intel Management Engine Driver」を探す。「Detail」をクリックし、そこの説明に「Intel-SA-00086」という記載があったら、対応済みのドライバー。

Debian 9上でrbenvをシステムワイドにインストールする

Debian 9 "Stretch" を用いたサーバ設定メモ - 発声練習の続き。

gitのインストール

Debianのパッケージシステムでもgitでインストールできるようになったみたい。

% sudo aptitude install git

rbenvのインストール

CentOSでrbenvをシステムにインストールする - Qiitarbenvでsystem wideに入れるときに気をつけたいこと - Qiitaを参考にインストールする。

Githubからrbenv, ruby-build, そして rbenv-default-gemsを取得する。

% cd /usr/local
% sudo git clone https://github.com/rbenv/rbenv.git rbenv
% sudo chgrp -R staff rbenv
% sudo chmod -R g+rwxXs rbenv
% sudo mkdir rbenv/plugins
% cd rbenv/plugins
% sudo git clone https://github.com/rbenv/ruby-build.git ruby-build
% chgrp -R staff ruby-build
% chmod -R g+rwxs ruby-build
% sudo git clone https://github.com/rbenv/rbenv-default-gems.git rbenv-default-gems

グループstaffに現在のユーザhogehogeを付け加える。

% sudo usermod -aG staff hogehoge

rbenvの設定をログイン時を読み込むことができるように/etc/profile.d/rbenv.shを作成する。

% sudo touch /etc/profile.d/rbenv.sh
% sudo vi /etc/profile.d/rbenv.sh

中見は以下のようにした。

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init --no-rehash -)"

rbenvで初期化を行う。

% sudo su
# source /etc/profile
# exit

rbenvでsystem wideに入れるときに気をつけたいこと - Qiitaでおすすめのrbenv-default-gemsを設定する。これを設定することでrubyのインストール時に合わせてインストールするべきgemライブラリを指定することができる。

% sudo touch /usr/local/rbenv/default-gems
% sudo vi  /usr/local/rbenv/default-gems

中見は以下のようにした。

bundler
pry
rbenv-rehash

rubyのインストール

rubyのコンパイルに必要なパッケージをインストールする。

% sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev

rubyのインストール

% sudo su
# source /etc/profile
# which rbenv
# rbenv install --list
# rbenv install 2.4.2
# rbenv rehash
# rbenv global 2.4.2

gemのバージョンを最新にしておく。

# gem update --system

gemパッケージをインストールする際にドキュメントをつくらないように設定する。

# touch ~/.gemrc
# vi ~/.gemrc

.gemrcの中見は以下の通り。

install: --no-document
update: --no-document

Ruby on Railsのインストール

SQLite3関連のパッケージをインストールする。

sudo apt-get install libsqlite3-dev sqlite3

Ruby on Railsをインストールする。

% sudo su
# gem install rails

動作確認をする。

% cd /tmp
% rails new demo --skip-bundle
% cd demo
% vi Gemfile

Javascriptの実行環境であるtherubyracerをコメントインする。

gem 'therubyracer'

パッケージをインストールする。

% bundle install

動かしてみる。

% rails generate scaffold person name:string age:integer
% rails db:migrate
% rails server

Debian 9 "Stretch" を用いたサーバ設定メモ

Debian 9 (stretch)を使ってサーバを構築した際のメモ。

Debian 8との変更点

net-tools (ifconfig, netstatなど)ではなくiproute2 が入っているとのこと。また、GCC6になったのでカーネルのコンパイルしなおしが必要である場合がこと。

Debian stretch で提供される GNU GCC 6 コンパイラは、デフォルトですべての実行ファイルを position independent なものとしてコンパイルします。これはあらゆる種類の脆弱性に対する緩和を提供します。

残念なことに、(8.7 までの) Debian 8 での Linux カーネルは、position independent な実行ファイルとしてコンパイルされたプログラムのうちの幾つかがセグメンテーションフォルトのような、よくある問題を起こしてクラッシュする可能性がある問題がありました。この問題は 8.8 で提供される linux バージョン (3.16.43 以降) および Debian 9 でのカーネル (4.9 以降) で解決されています。

stretch へのアップグレードを開始する前に、カーネルを修正されたバージョンにアップグレードしてから再起動するのをお勧めします。Debian 8.8 以降のカーネルを稼働させている場合は、この問題の影響を受けません。

アップグレード中、影響を受けるバージョンのカーネルで稼働している場合、アップグレード直後にこの問題が直撃するのを避けるため、再起動を実行して stretch のカーネルにするのを強くお勧めします。
5.1.5. 実行ファイルはデフォルトで PIE (position independent executables) が有効でコンパイルされています

インストール

省略。

/etc/apt/sources.list を編集する

contoribとnon-freeを追加する。また、私はaptitudeが好きなのでインストールする。

% su
# apt-get update
# apt-get upgrade
# apt-get install aptitude

セキュリティ関係の設定

そこそこセキュアなlinuxサーバーを作る - Qiitaを参考に以下を実行する。

  • sshでrootにlogin出来なくする
  • sshdのプロトコルを2に限定する
  • sshguardかfail2banを導入する
  • 使わないポートを閉じる
  • passpromptを変える
  • logwatchを入れる

passpromptを変える

まず、sudoをインストールする。

% su
# aptitude install sudo
# visudo

sudoを実行した際のパスプロンプトをそこそこセキュアなlinuxサーバーを作る - Qiitaの設定を参考に変更する。

sshdの設定の変更

/etc/ssh/sshd_configの設定をそこそこセキュアなlinuxサーバーを作る - Qiitaの設定を参考に変更する。

sshguardかfail2banを導入する

% sudo aptitude sshguard

使わないポートを閉じる

iptableを使って、使わないポートを閉じる。まず、iptables-persistentをインストールする。

% sudo aptitude  install iptables-persistent

/etc/iptablesに設置されているrules.v4を変更する。変更は以下のサイトを参考にする。

logwatchを入れる

% sudo aptitude install logwatch

Debian 8 (Jessie) - ログ解析ツール logwatch インストール! - mk-mode BLOGに従い、設定ファイルを設置する。

% cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/

logwatch.conf の「MailTo =」でログを送信したい宛先メールアドレスを設定する。

自動時刻合わせ

ntpdateをインストールする。

% sudo aptitude install ntpdate

crontabで時間合わせする。/etc/cron.weekly にスクリプトを置く。

% sudo touch /etc/cron.weekly/ntpdate.sh
% sudo chmod 755 /etc/cron.weekly/ntpdate.sh

組織内のNTPサーバがhogehoge.jpとしたとき、ntpdate.shの内容は以下の通り。

#!/bin/sh
/usr/sbin/ntpdate hogehoge.jp > /dev/null 2>&1

GCC関連のインストール

% sudo aptitude install gcc g++ make autoconf m4 bison flex

メモ:ジンバブエのムガベ大統領辞任

ジンバブエとしえば「ハイパーインフレ」としか知らなかった。先日のSession 22でジンバブエの歴史が説明されていて大変おもしろかった。「世界最悪の独裁」というのは宗主国イギリスのポジショントークだったというのは全く知らんかった。
www.tbsradio.jp

ムガベ大統領の後継者が今回の騒動の問題だったとのこと。
www.afpbb.com

www.bbc.com

結局、辞任した様子。
jp.reuters.com