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]。
「B1 Console」を選択し[Enter]。
一つ前の画面に戻るので、[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を使ってサーバーを構築するための基礎が出来上がりました。
個々のサーバー機能の構築方法やセキュリティの更なる向上については、また別の機会にご紹介したいと思います。