Raspberry Pi 初回設定（購入 + OSインストール + セキュリティ設定）

# 概要
RaspberryPi 3 model B+を購入したので備忘録ついでに初期セットアップ方法を記載したいと思います。

# 準備物
秋葉原に行って購入してきました。

| 品名                                  | 価格         | 備考                |
|:-------------------------------------|------------:|:--------------------|
| RaspberryPi 3 model B+               | 5600円      |                     |
| MicroUSB TypeB 電源(5V/3A)            | 700円       |                     |
| RaspberryPi 3 用ケース                | 1000円      |                     |
| HDMIケーブル                          | 380円       | 予備が無かったので    |
| microSD(16GB)                        | 1680円      |                     |
| マウス                                | -           | 購入済              |
| キーボード                             | -          | 購入済               |
| モニター                              | -           | 購入済              |
| OSインストール&初期設定を実施する為の端末 | -           | 購入済              |

# インストール前準備
今回は未インストールのSDカードを購入したので、SDカードにOSインストーラの配置から実施します。

##1. OSインストーラ(NOOBS)を取得

RaspberryPi公式からOSを入手。今回はインストーラ型のNOOBSを選択。

https://www.raspberrypi.org/downloads/noobs/

「NOOBS」の方の「Download　ZIP」をクリックしてダウンロード。
ダウンロードしたzipを解凍する。
※「NOOBS Lite」の方はネットワークインストール型らしいです。
![download.png](https://qiita-image-store.s3.amazonaws.com/0/340824/50517cf3-96c3-1bba-20e7-f39d667bd753.png)

##2. SDカードのフォーマット&NOOBS配置

SDカードにNOOBSを書き込む前に「SDメモリカードフォーマッター」を取得。
ダウンロードしたzipを解凍してインストーラを起動し、SDメモリカードフォーマッターをインストール。

https://www.sdcard.org/jp/downloads/formatter_4/

インストール後起動し、変更なしで「フォーマット」をクリック。

![format.png](https://qiita-image-store.s3.amazonaws.com/0/340824/0729fd88-07d6-ff39-472a-49a9c8012f47.png)

フォーマットが完了したら「1.OSインストーラ(NOOBS)を取得」で
取得&解凍したファイルを全てSDカードにコピー。

![format.png](https://qiita-image-store.s3.amazonaws.com/0/340824/dbcb3082-0154-d724-d684-97a174d281e0.png)

##3. 本体の各種セッティング

SDカードを接続後RaspberryPiをケースに格納し、マウス&キーボード、HDMIケーブルを接続。
~~SDカードを入れる前にケースに入れてしまい、本体を再度取り出すのに苦労して~~
~~取り出した後にケース横にSDカードを入れるスリットがあることを発見しました~~

最後に電源を接続するとRaspberryPiが起動。

# インストール&初期設定
SDカードと本体の各種接続が終わったらRaspberryPiを起動し、初期設定を行います。

##1.OSのインストール

電源起動後、言語設定を「日本語」に設定。
左上のアイコンから「設定」→「Raspberry Piの設定」をクリックして「ローカライゼーション」タブを選択。
「ロケールの設定」を選択後、「言語」を「ja(Japanese)」、「文字セット」を「UTF-8」に設定。
「タイムゾーン」の「地域」を「Asia」、「位置」を「Tokyo」に設定。
「キーボードの設定」で「Model」に「Generic 105-key (Intl) PC」、「Layout」に「Japanese」、「Variant」に「Japanese」を設定。
※「Variant」は接続するキーボードのレイアウトに依存するため、上記以外の選択になることもある

「Raspbian Full」を選択後、ウィンドウ上部の「インストール」をクリック。
正常に完了すればOSインストールが完了。

##2.セキュリティ設定
公式にも記載があるが、そのままだとセキュリティに問題があるので下の手順の通り設定を変更する。
https://www.raspberrypi.org/documentation/configuration/security.md

###1.ファームウェアの最新化

アップデートの完了後システムを再起動。

```shell
$ sudo rpi-update
```

###2. インストールされているパッケージを最新化

```shell
sudo apt-get update
sudo apt-get upgrade
```

###3. Vimの導入（任意）

始めからインストールされているviは使い勝手が良くない~~らしい~~のでVimをインストール。

```shell
sudo apt-get install vim
```

###4.~~rootパスワードの設定~~
**2020年2月16日追記**
パスワード未設定のユーザはログインができないようです。
rootアカウントはセキュリティ上あえてパスワードを未設定にしているため、そのままの方が良いそうです。
一度パスワードを設定した後に未設定状態に戻す方法を後程追記しておきます。
@kanchi さん教えていただきありがとうございます。

~~初期設定では管理者アカウントのパスワードが未設定となっているため新規に設定する。~~
~~下記コマンドを実行後、新しいパスワードを2回入力。~~

```shell
sudo passwd root
```

###5.ユーザの追加&piユーザの削除
デフォルトのログインユーザであるpiユーザはユーザ名・パスワード共に公開されています。
最近では未変更のRaspberryPiを狙ってpi:raspberryでログインを試すマルウェアも登場しているので、
最低でも必ずpiユーザのパスワードは変更する必要があります。
更にセキュリティを高める場合は新規にユーザを追加し、piユーザは削除もしくは無効化しておくと良いでしょう。

####1. ユーザの新規作成

```shell
sudo adduser adduser1
```
※adduser部分は任意のユーザ名に変更すること

####2. 作成したユーザをpiユーザと同じグループに追加
sudo権限を付与するだけなら`sudo gpasswd -a adduser1 sudo`で良いのですが、piユーザは複数のグループに入っているので
一応piユーザと同一のグループに全て追加しておきます。

**1.piユーザが所属しているグループを全て表示**

```shell
groups pi
```

**2.表示されたグループを確認**

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

**3.作成したユーザを先程確認したすべてのグループに追加**

```shell
sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio adduser1
```

**4.グループ追加が正常に実施されたことを確認**

```shell
groups adduser1
```

**5.piユーザ内のデータを作成したユーザにコピー（任意）**

```shell
sudo cp -r /home/pi/* /home/adduser1
```

**6.一度再起動を行い、作成したユーザでログインを実施**

RaspberryPiを再起動し、先程作成したユーザでログインが可能かを確認します。
`su ユーザ名`でユーザを切り替えでも大丈夫だと思います。

####3. piユーザの削除
アカウントを作成したらpiユーザは不要なので削除します。

**1.オートログイン無効化**

```shell
sudo vim /etc/lightdm/lightdm.conf
```

下の行をコメントアウトする

```shell:lightdm.conf
- autologin-user=pi
+ #autologin-user=pi
```

autologin&#64;.serviceを修正します。

```shell
sudo vim /etc/systemd/system/autologin@.service
```

下の行を変更する

```shell:autologin&#64;.service
- ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
+ ExecStart=-/sbin/agetty --noclear %I $TERM
# 作成したユーザで自動ログインする場合は下のコマンドに変更する
+ ExecStart=-/sbin/agetty --autologin adduser1 --noclear %I $TERM
```

**2.piユーザを削除もしくは無効化**

```shell:piユーザを削除する場合
sudo userdel -r pi
```

```shell:piユーザを無効化する場合
sudo gpasswd -d pi sudo
# piユーザが存在しない事を確認
id -a pi

# パスワード無しでsudo実行できる権限を外す
sudo vim /etc/sudoers.d/010_pi-nopasswd
  -  pi ALL=(ALL) NOPASSWD: ALL
  +  #pi ALL=(ALL) NOPASSWD: ALL

# piユーザをロック
sudo passwd --lock pi

# piユーザでログインできないことを確認
su pi
```
## 3.その他設定（任意）

必須の設定ではないですが今回インストールや修正をおこなった作業を記載します。

###1.ksnapshot(Spectacle)のインストール

ログを残す時などに画面キャプチャを取得したい場合があるので
ksnapshot(Spectacle)をインストールします。

**1.インストール**
`sudo apt-get install kde-spectacle`を実行してインストール。

**2.起動**
左上のアイコンから「アクセサリ」→「Spectacle」で実行。
初期状態では実行した瞬間の画面キャプチャが取得される。
※画像を保存しようとした際に上記そのままの状態だとadduser1配下の所有者が
「root」になっていて保存ができないため、adduser1配下に保存したい場合は
事前にディレクトリのパーミッションを変更すること。

###2.解像度の変更

左上のアイコンから「設定」→「Raspberry Piの設定」をクリックしてパスワードを入力。
「システム」タブの「オーバースキャン」を無効に設定。

「解像度の設定」をクリックしてモニタに対応する解像度を設定。
※PCモニタを使用している場合は「DMT ～」を選択するのが基本だが、こちらの
環境では「CEA ～」を選択しないと正しい解像度で読み込まれなかった。

#リモート接続
常時キーボード・マウスやモニタを接続するのは煩わしいのでリモート接続の設定を行います。

##1. sudo実行時にパスワードを不要にする（非推奨）
セキュリティ的には非推奨ですが、毎回sudoを実行時にパスワードを入れるのが手間なので
sudo実行時のパスワードを入れないように設定します。

```shell
sudo vim /etc/sudoers.d/010_pi-nopasswd
```
※`sudo vim /etc/sudoers`及び`sudo visudo`は古い記述になっている

下の行を追加。

```shell:sudoers
  adduser1 ALL=(ALL) NOPASSWD: ALL
```

##2. 固定IPアドレスの設定

RaspberryPiを起動するたびにIPアドレスが自動で割り当てられると接続の際に
毎回確認することになってしまうので、IPアドレスを固定します。

```shell
sudo vim /etc/dhcpcd.conf
```

下の行を編集してRaspberryPiを再起動。
再起動後、`ifconfig`を入力して設定したIPアドレスが反映されているかを確認。

```shell:dhcpcd.conf
  # 無線LANの場合は「wlan0」を、有線LANの場合は「eth0」を設定してください
  interface eth0
  static ip_address=192.168.XXX.XXX/24            # 設定したいIPアドレス
  static routers=192.168.XXX.XXX                  # デフォルトゲートウェイ
  static domain_name_servers=192.168.XXX.XXX      # DNSサーバ
```

##3. SSH・VNCの設定

###1.rootアカウントでのログインとパスワード認証を拒否する

外部からのRaspberryPiへの接続を許可する場合は
rootへのログインとパスワード認証を拒否するよう設定します。

```shell
sudo vim /etc/ssh/sshd_config
```

下の行を追加。

```shell:sshd_config
  # rootでのログインを拒否する
    #PermitRootLogin prohibit-password
  + PermitRootLogin no

  # パスワード認証を拒否する
    #PasswordAuthentication yes
  + PasswordAuthentication no

  # LAN内から接続した場合のみrootでのログインとパスワード認証を許可する
  + Match Address 127.0.0.1, 192.168.XXX.XXX/24	
  +   PermitRootLogin yes
  +   PasswordAuthentication yes
```

###2.SSHのポート番号を変更

デフォルトのポート番号22のままだと攻撃される可能性があるのでポート番号を変更します。
0から1023と、1024から49151は既に割り当てが行われているので<font color="#FF0000">__49152～65535__</font>の範囲で変更を行います。

```shell
sudo vim /etc/ssh/sshd_config
```

下の行を追加。

```shell:sshd_config

    #Port 22
  + Port XXXXX
```

###3.SSHとVNCの有効化

**1.有効化**
左上のアイコンから「設定」→「Raspberry Piの設定」をクリックしてパスワードを入力。
「インターフェイス」タブの「SSH」と「VNC」を有効に設定。

**2.SSHファイルの作成**
`sudo touch /boot/ssh`を実行してSSHファイルを作成する。

**3.SSHサービスの自動起動**
`sudo systemctl enable ssh`を実行してシステムを再起動する。
再起動後に`sudo service ssh status`を実行してSSHサービスが起動していることを確認する。

###4.接続確認

各種設定が完了したら接続確認を行います。
※SSH接続については公開鍵の設定をしていないので後で追記します

####1.SSHの接続確認

「Tera Term」を起動。未インストールの場合は下記URLから取得&インストール。
https://ja.osdn.net/projects/ttssh2/
ホストには設定したIPアドレスを`192.168.XXX.XXX`の形式で入力、
（ユーザ名まで指定する場合は`adduser@192.168.XXX.XXX`）
TCPポートには設定したポート番号を入力して「OK」をクリック。
接続が正常に実行できることを確認する。

![teraterm.png](https://qiita-image-store.s3.amazonaws.com/0/340824/26129a17-3347-4ea6-9853-4208b5c45233.png)

####2.VNCの接続確認

下記URLより「VNC Viewer」を取得。インストーラー版とスタンドアローン版があるので好みの方をダウンロードする。
https://www.realvnc.com/en/connect/download/viewer/

「VNC Viewer」を起動して赤枠のところに設定したIPアドレスを入力してエンターキーを押下。
パスワードを求められるので初期設定時に作成したユーザアカウントとパスワードを入力する。
RaspberryPiのデスクトップが表示される事を確認する。

![VNCViewer.png](https://qiita-image-store.s3.amazonaws.com/0/340824/4afecb7a-6a4d-44c2-4290-4fd6c79c4c56.png)

#総括

これで最低限のセキュリティ設定はできたと思います。
今後はSSHもしくはリモートデスクトップ経由で各種設定を実行できるので、
毎回キーボードなどを接続しなくても操作が可能になります。