読者です 読者をやめる 読者になる 読者になる

STDIO

システム開発やフクロウ、節約などの情報をI/Oするためのブログ

「Raspberry Pi 2」(ラズベリーパイ)サーバー構築・基礎編

CPUのクアッドコア化やメモリの倍増など、従来機から大幅にスペックアップした「Raspberry Pi 2」(以下、RP2)。

その性能と省電力を活かせば、コストパフォーマンスの高いサーバーの構築も夢ではありません。

しかし、標準OS「Raspbian」の初期設定は学習を目的としたものであり、サーバー用途には適していません。

例えば、電源投入後にユーザー名やパスワードを入力せずに、自動的にデスクトップが開きます。 すぐに使えて便利ですが、外部から接続されるサーバーとしてはセキュリティ上好ましくありません。

また、デスクトップなどのGUIはマシンのリソースを消費するため、サーバーのパフォーマンスを優先する場合は停止するべきです。 (RP2のようにハイスペックでないマシンでは特に)

今回はRP2でサーバーを構築する際に設定しておきたい内容をまとめました。 サーバーの用途はファイルサーバーやメール、DB、Webなど様々ですが、各サーバー機能を構築する際の事前準備として、本記事をご活用いただければと思います。

なお、Raspberry Pi本体や周辺機器の用意、OSのインストール、PCからのSSH接続については下記記事にまとめています。 はじめての方は、まずはこちらをご確認いただければと思います。

環境

本記事の内容は次の環境で動作確認しています。

モデル: Raspberry Pi 2 Type B(element14版)
OS: Raspbian 8.0(Jessie)
(NOOBS Ver.1.9.0で導入)
有線LAN接続

デスクトップ(GUI)と自動ログインの停止

Raspbian(Ver.8.0)の初期設定では、電源投入後にデスクトップ(GUI)の起動とユーザー「pi」のログインが自動で行われます。 リソースの節約とセキュリティ向上のため、これらの機能を停止します。

ターミナル、またはSSH接続にて設定画面「raspi-config」を開きます。

$ sudo raspi-config

「3 Boot Options」を選択し[Enter]。

Raspbian GUI停止1

「B1 Console」を選択し[Enter]。

Raspbian GUI停止2

一つ前の画面に戻るので、[Esc]キーで設定画面を閉じます。

今後、RP2に直接ログインする際は手動でユーザー名とパスワードを入力します。

また、ログイン完了後に次のコマンドを入力することで、デスクトップを起動できます。

$ startx

GUI停止によるメモリ節約効果

メモリ使用状況をMB単位で表示する「free -m」で確認したところ、メモリ使用量は次の結果になりました。 システム全体で1GBのRP2にとっては、大きな節約効果があると言えます。

GUI有効: 232MB
GUI無効: 84MB

※いずれもRP2本体とSSHの2セッションログイン状態

IPアドレスの固定

サーバーは他のPCや外部ネットワークから接続することになるので、IPアドレスは固定しておいた方が便利です。

Raspbianの初期設定はIPアドレスが可変(DHCP)になっているので、固定IPアドレスに変更します。

IPアドレスの決め方

RP2に設定するIPアドレスを決めるため、現在の値を確認します。

$ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx 
          inetアドレス:192.168.1.xxx ブロードキャスト:192.168.1.255  マスク:255.255.255.0
以下省略

[inetアドレス]の「192.168.1.xxx」がルーターのDHCPにより割り振られたRP2のIPアドレスです。(xには数字が入ります)

今回はRP2のIPアドレスを「192.168.1.100」に固定します。
元のIPアドレスが「192.168.0.xxx」の場合は「192.168.0.100」としてください。

※本来はルーターのDHCP割り当て範囲を確認し、その範囲外の値を設定する必要があります。 通常は「192.168.1.2」、「192.168.1.3」と順に割り振られるため、末尾「100」であれば他の機器との重複はおそらくありません。 詳しくはお使いのルーターの設定・マニュアルをご確認ください。

設定ファイル「dhcpcd.conf」の変更

設定ファイル「/etc/dhcpcd.conf」の末尾に、先ほど決めた固定IPアドレスの情報を追加します。

テキストエディタ「nano」を起動し、設定ファイルを開きます。

$ sudo nano /etc/dhcpcd.conf

方向キー[↓]か、マウスホイールでファイル末尾に移動し、次の内容を追加します。

interface eth0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

2行目はRP2の固定IPアドレス、3〜4行目はルーターのIPアドレスを指定します。

※ルーターのIPアドレスは通常、RP2のIPアドレスの最後を「1」に変えた値です。

追加が完了したら[Ctrl]+[O]入力後に[Enter]で保存し、[Ctrl]+[X]でnanoを終了します。

設定ファイルの内容を表示し、正しく保存されたことを確認します。

$ cat /etc/dhcpcd.conf

設定変更の反映

設定ファイルの変更を反映します。

$ sudo service dhcpcd reload

※IPアドレスが変わるので、SSH接続で実施した場合は接続を維持できません。 その際はSSHのウィンドウを閉じ、今回設定したIPアドレスで接続し直してください。

設定変更の確認・疎通テスト

IPアドレスが正しく設定されたことを確認します。

$ ifconfig

[inetアドレス]の部分に指定したIPアドレスが表示されれば成功です。

また、PCで下記コマンドを入力し、RP2から応答が返ってくることを確認しましょう。

$ ping 192.168.1.100

※Macでは[Ctrl]+[C]を押すまで止まりません。

192.168.1.100 に ping を送信しています 32 バイトのデータ:
192.168.1.100 からの応答: バイト数 =32 時間 =2ms TTL=64

以上でIPアドレスの固定は完了です。

rootユーザーのパスワード設定

Linuxには「root」という管理者用のユーザーが存在します。(RaspbianもLinuxの一種) rootはすべての権限を持ち、悪用されると危険なためパスワードを設定します。

下記コマンドを入力すると、新しいパスワードの入力を要求されます。

$ sudo passwd root

任意のパスワードを入力し、[Enter]。(2回繰り返す)
※他の人が推測できるような簡単なパスワードは避けます。

設定を確認するため、「su」コマンドを入力してrootに切り替えてみます。

パスワードの入力を要求されるので、先ほど設定した値を入力してroot(プロンプトが#)に切り替わることを確認します。 「exit」コマンドで通常のユーザーに戻ります。

作業用ユーザーの追加

Raspbianに最初から存在するユーザー「pi」は、ユーザー名もパスワード(raspberry)も広く知られているため、外部からの攻撃に対してリスクが高いです。

ここでは「pi」の代わりとなる作業用のユーザー「stdio」を新たに作成します。

※ユーザー名は任意の値を設定し、以降の説明における「stdio」は読み替えてください。

ユーザーの作成

ユーザーの作成を開始します。

$ sudo adduser ユーザー名

対話形式でユーザーの作成を進めます。

新しいユーザーに設定するパスワードを入力後に[Enter]し(2回繰り返す)、それ以外の項目は未入力のまま[Enter]で進めます。

$ sudo adduser stdio
ユーザ `stdio' を追加しています...
新しいグループ `stdio' (1001) を追加しています...
新しいユーザ `stdio' (1001) をグループ `stdio' として追加しています...
ホームディレクトリ `/home/stdio' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
stdio のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
    フルネーム []: 
    部屋番号 []: 
    職場電話番号 []: 
    自宅電話番号 []: 
    その他 []: 
以上で正しいですか? [Y/n] y

最後の確認に対して[y]を入力後、[Enter]でユーザーが作成されます。

グループへの追加

作成したユーザーを「pi」が所属するグループに追加し、同様の作業ができるようにします。

最初に「pi」の所属グループを確認します。

$ groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio

「pi :」に続く、スペース区切りの値が所属グループです。

続いて「pi」が所属するグループに、作成したユーザーを追加します。 グループはカンマ区切りで指定します。(コマンドの末尾は作成したユーザー名を指定)

$ sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,spi,gpio ユーザー名

作成したユーザーの所属グループを表示し、正しく追加されたことを確認します。

$ groups ユーザー名

sudoのパスワード省略設定

「pi」では、「sudo」による管理者権限でのコマンド実行をパスワードの入力なしで行えました。

新たに作成したユーザーではパスワードの入力が必要となるので、省略したい場合は設定ファイル「sudoers」を編集します。

$ sudo nano /etc/sudoers

最終行が「pi」のパスワード省略設定なので、行頭を作成したユーザー名に書き換えます。

pi ALL=(ALL) NOPASSWD: ALL

「pi」はこの後削除するので、省略設定をしない場合でも先頭に「#」を付けてコメントアウトすることをおすすめします。

ホームディレクトリのコピー

この後の手順で「pi」は削除してしまいます。 サンプルプログラムなど、ホームディレクトリ内のファイルを残しておきたい場合は、次の手順でコピーします。

作成したユーザーに切り替えます。(パスワードを応答)

$ su ユーザー名

「pi」のホームディレクトリ内のディレクトリ、ファイルをコピーします。

$ cp -r /home/pi/* /home/ユーザー名

※ファイルのコピー結果は検証しておりません。ホームディレクトリ内に大切なファイルがある場合はご注意ください。

デフォルトユーザー「pi」の削除

作業用ユーザーの追加が完了したので、「pi」を削除します。

一度RP2を再起動し、今回作成したユーザーでログイン(またはSSH接続)し直します。

$ sudo reboot

「pi」を削除します。これからはただのラズベリーになるのでご注意ください。

$ sudo userdel -r pi

※オプション「-r」により「pi」のホームディレクトリが削除されますので、残したい場合は外してください。

まとめ

今回の作業で、RP2を使ってサーバーを構築するための基礎が出来上がりました。

個々のサーバー機能の構築方法やセキュリティの更なる向上については、また別の機会にご紹介したいと思います。