Raspberry Piデビューする前に

Raspberry Piを使っている人、多いかと思います。あんなに小さいのに普通にLinuxが動きますし、GPIOなどを使って外部ハードウェアと簡単に連携できるのがいいですね。お手頃価格で入手できるのも魅力です。

こういった機器が手軽に使えるようになるのはいいことなのですが、小さくても普通のLinux、それ相応の設定が必要です。特に、ネットワークに接続する前のセキュリティ設定は欠かせません。グローバルIPを使わないから、とか、社内・学内ネットワークにしか繋がないから、とかいうのはセキュリティ設定をおろそかにする理由にはなりません。内部ネットワークからの侵入がないと言い切れる人はいませんよね。

Raspberry Piの設定記事では、まずネットワークに接続するところから解説しているものが多いようです。楽しいところから始めたいという気持ちは十分理解できます。一方で、十分なセキュリティ設定をしないままネットワークに繋いでしまったために事故を起こしてしまったという話も耳にします。

この記事では、僕たちがRaspberry Piをネットワークに接続する前に最低限実施している内容を紹介します。

# ログインパスワードを変更する

Raspberry Piをインストールした直後、特別なことをしなければ`pi`というアカウントが作成されているはずです。ログインパスワードは`raspberry`になっています。まずこれを変更しましょう。全世界のRaspberry Piユーザーが知っているログインパスワードをそのまま使い続けるというのは、自宅の鍵のコピーを全世界の人々にばらまいて回るようなものです。もちろん、ほとんどの人はそれを使ってあなたの自宅に侵入しようとは思わないかもしれませんが、世の中には違う考えを持っている人もいます。

最新のNOOBSでRaspbianをインストールした場合、初回起動時にログインパスワードを変更する画面が表示されるはずです。ここで手を抜かずに、きちんと推測されにくいログインパスワードを設定しましょう。

![askpass.png](https://qiita-image-store.s3.amazonaws.com/0/102672/10fe76ed-5671-4563-cdd7-e2a01c694d72.png)

Raspbian以外のOSを使う場合は、それぞれのOSが対応する方法で初期ログインパスワードを変更します。

# sshの公開鍵を設置する

ログインパスワードを変更することで、セキュリティのレベルが一つ上がりました。次の段階へ進みましょう。インターネットに接続する場合、ログインパスワードでの遠隔ログインは許可しないのが普通です。世の中にはログインパスワードを推測する手法がたくさんあります。いったんログインパスワードが漏れてしまえば誰でも遠隔ログインできてしまいます。目立ちたいだけの侵入者ならともかく、悪意のある侵入者は不正侵入していることを極力隠そうとするでしょう。ログインパスワードが漏れていることに気付かず、長い期間侵入され放題ということもあるわけです。

遠隔ログインにはssh（Secure Shell）を使います。sshは、ログインパスワードでのログインよりも安全な、公開鍵を使ったログイン手段を提供しています。Raspberry Piに遠隔ログインする場合は、ますログイン元（手元のPCなどですね）でsshの鍵ペア（秘密鍵と公開鍵）を作り、公開鍵をRaspberry Piに登録しましょう。秘密鍵は、決して漏らしてはいけません。もっといえば、鍵を作成したPCから外に持ち出すことも普通はしません。侵入者は、あなたがPC上で作成した秘密鍵と、その鍵に設定したパスフレーズの両方を入手しない限り、不正に遠隔ログインすることはできません。これでさらにセキュリティのレベルが上がります。

まだsshの鍵ペアを持っていない人は、Raspberry Piへの遠隔ログインに使おうと思っているPCで`ssh-keygen`コマンドを実行します。

    yourid@yourpc:~ $ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/yourid/.ssh/id_rsa):（そのままリターンキーを入力します）
    Created directory '/Users/keiichi/.ssh'.
    Enter passphrase (empty for no passphrase): （ssh鍵ペアにパスフレーズを設定します。推測されにくい文字列を設定しましょう。）
    Enter same passphrase again: （同じ文字列を再度入力します。）
    Your identification has been saved in /home/yourid/.ssh/id_rsa.
    Your public key has been saved in /home/yourid/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:AZFP+z1F/tQQYvjY+RuC9fTL4PP4kGi9Wb9lAmBvfN4 yourid@yourpc
    The key's randomart image is:
    +---[RSA 2048]----+
    |      oo   .o .. |
    |      ... .. .o  |
    |       o..o+ + ..|
    |        oo.+= + o|
    |        S. +==.+ |
    |          o.*==.o|
    |           o.*=+E|
    |          .  oB=o|
    |             +++o|
    +----[SHA256]-----+

以上でsshの鍵ペアが作成されました。秘密鍵は`~/.ssh/id_rsa`に保存されます。繰り返しになりますが、これは決して持ち出してはいけません。公開鍵は`~/.ssh/id_rsa.pub`に保存されます。このファイルをログイン先のRaspberry PiにSDカードなどを使ってコピーし、`~/.ssh/authorized_keys`という名前で保存します。もし`~/.ssh`ディレクトリが存在しなければ、`mkdir`コマンドでディレクトリを作成しましょう。

    pi@raspberry:~ $ mkdir -m 700 .ssh

`-m`オプションはファイルのアクセス権の設定です。`700`を指定することで、そのファイル・ディレクトリの所有者のみが操作できるディレクトリが作成されます。詳しくは`mkdir`コマンドのマニュアルを参照してください。

# パスワードログインの停止

sshの公開鍵を設定したことで、より安全に遠隔ログインできるようになりました。しかし、この状態ではまだログインパスワードでもログインできてしまいます。ログインパスワードでのログインを停止し、公開鍵でのログインのみを許可する設定にしなければ安全性は以前のままです。ログインパスワードを使ったログインの許可・不許可は`/etc/ssh/sshd_config`で設定できます。このファイルを覗いてみると、以下のような行が見つかるはずです。

    #PasswordAuthentication yes

この行を

    PasswordAuthentication no

に変更します。`/etc/ssh/sshd_config`はシステムファイルのひとつですから、変更するためには管理者権限が必要です。以下のコマンドで編集します。

    pi@raspberry:~ $ cd /etc/ssh
    pi@raspberry:~ $ sudo vi sshd_config
    (編集してファイルを保存)

上の例ではエディタとして`vi`を使っていますが、自分が使い慣れたエディタで編集して構いません。

ファイルを変更しただけでは設定は反映されません。以下のコマンドでsshサービスを再起動し、更新した設定を読み込みます。

    pi@raspberry:~ $ sudo service ssh restart
    Password: (アカウントのパスワード)

# ネットワークの設定

これで最低限の設定が終わりました。この段階でようやくインターネットに接続しても大丈夫な状態になります。ネットワークの設定については、多くの情報がブログなどで出まわっているのでここでは解説しません。

# おわりに

数千円でフルスペックのLinuxやUNIXが動く時代になりました。同等の性能のコンピュータが数百万円、数千万円していた時代を経験した人にはまさに夢のようです。

ただ、技術が急速に進歩したせいで、安全に関わる大切な知識を学ぶ機会のないまま、インターネットに飛び込んでしまう人も増えてきています。事故や失敗もいい経験ですので、一概に失敗することが悪いことではありませんが、失敗は時として自分以外の人に多大な迷惑をかけてしまうことがあります。この記事が、そういった失敗を未然に防ぐ役に立てば幸いです。