注目キーワード

【Raspberry Pi 】利用を開始する前に、必ずやること(セキュリティ強化)

すけろく
Raspberry Pi は、OSの書き込みも簡単で
すぐに使いはじめられるな!
げんろく
初期設定はちゃんとしたのか?
まさか、初期設定のまま使っていることはないよな?
すけろく
。。。
げんろく
初期設定のままだと、特にユーザ名は公開名だから
セキュリティ上よろしくないのだ。
そのあたりも含めて説明しよう。
Raspberry Pi のOSインストール(MicroSDへの書き込み)については、すでに別の記事で説明しました。
この記事では、OSインストール後に見直すべき初期設定と変更方法について紹介します。
Raspberry Pi はセンサーやカメラなどに接続してデータを取得したり、例えば家のリモコンを遠隔操作したり、とIoTデバイスとして使うことも多いため、セキュリティの確保は大切になります。
OSインストールの際にも触れましたが、ユーザ名「pi」とか、パスワード「raspberry」は、Raspberry Pi 界の「scott/tiger」なので、Raspberry Pi を使う人ならば、誰もが知っています。
これは、セキュリティ上よろしくないですよね。(ネットワーク上にRaspberry Pi があるとわかった場合、ハッカーがこのユーザとパスワードでログインできるか試すかもしれません。)
また、リモート接続にSSHを使いますが、SSHの接続ポート「22」も既知のポートなので攻撃される可能性が高くなります。
こういった初期設定をそのままにしておくと、それだけでリスクになるためきちんと設定を見直す必要があります。
今回は見直すポイントとして特に以下の設定について紹介します。
  • rootのパスワードを設定する
  • 初期ユーザ「pi」をほかのユーザに移行する
  • SSHのポートや設定を変更する

 

では、一つ一つ見直していきましょう!

基本的に設定はコマンドベースで行います。入力コマンドは、「コマンド」と色を付けて記載します。入力の結果出力される内容については、「出力」のような色で記載しています。
各コマンドの頭にある「$ 」はプロンプト部分なので、入力は不要です。

rootのパスワードを設定する

Raspberry Pi OSでは、初期設定としてはrootのパスワードは設定されていません。ここでは、rootのパスワードを設定します。

rootにパスワードを設定する手順


1
コマンドプロンプトを起動して、Raspberry Pi にSSHで「pi」ユーザを使ってログインします。

$ ssh pi@raspberrypi.local

※「pi」はユーザ名になります。
※「raspberrypi.local」はホスト名です。OSインストール(書き込み)時にホスト名を変更した場合は、そちらのホスト名を入力します。


2
パスワードを聞いてきますので初期パスワードを入力します。

pi@raspberrypi.local's password: raspberry
Linux raspi01 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l ......
$

※OSのインストール(書き込み)時にSSH接続設定でパスワードを設定した場合は、そちらのパスワードを入力します。


3
rootのパスワードを設定します。

$ sudo passwd root
New password: XXXXXXXXXXX
Retype new password: XXXXXXXXXXX
passwd: password updated successfully

※2回パスワードを入力し「passwd: password updated successfully」と表示されれば完了です。


 

初期ユーザ「pi」を新規ユーザに切り替える

ここでは、Raspberry Pi OSで初めから作成されている管理者ユーザ「pi」から新しいユーザに権限を移行し、最終的には「pi」ユーザを削除するとことまで説明します。

作業の流れは次のようになります。

  1. 新規管理者ユーザを作る
  2. 新規管理者ユーザに「pi」ユーザの権限を付与し、ディレクトリの内容をコピーする
  3. 「pi」ユーザの自動ログインなどの初期設定を変更する
  4. 新規管理者ユーザでログインできることを確認する
  5. 「pi」ユーザを削除する

 

「pi」ユーザを新規ユーザに切り替える手順


1
コマンドプロンプトを起動して、Raspberry Pi にSSHで「pi」ユーザを使ってログインします。

$ ssh pi@raspberrypi.local

※「pi」はユーザ名になります。
※「raspberrypi.local」はホスト名です。OSインストール(書き込み)時にホスト名を変更した場合は、そちらのホスト名を入力します。


2
パスワードを聞いてきますので初期パスワードを入力します。

$ raspberry
Linux raspberrypi 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l ......
$

※OSのインストール(書き込み)時にSSH接続設定でパスワードを設定した場合は、そちらのパスワードを入力します。


3
新しく管理者ユーザを作成します。

$ sudo adduser "新しいUser"
Adding user `新しいUser' ...
Adding new group `新しいUser' (1001) ...
Adding new user `新しいUser' (1001) with group `新しいUser' ...
Creating home directory `/home/新しいUser' ...
Copying files from `/etc/skel' ...
New password: XXXXXXXXXX 
Retype new password: XXXXXXXXXX
passwd: password updated successfully
Changing the user information for 新しいUser
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []: 
Home Phone []: 
Other []:
Is the information correct? [Y/n] y
$ 

4
新しく作成した管理者ユーザに「pi」ユーザと同じ権限をつけます。まずは「pi」ユーザの権限を表示します。

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

続いて新しく作成した管理者ユーザに権限を付与します。

$ sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio,lpadmin "新しいUser"
$

新しいユーザの権限を確認して、設定されていることを確認します。

$ groups "新しいUser"
"新しいUser" : "新しいUser" adm dialout cdrom sudo audio video plugdev games users input netdev pi spi i2c gpio lpadmin

5
「pi」ユーザのホームディレクトリを新しい管理者ユーザに引き継ぎます。

$ sudo cp -r /home/pi/* /home/"新しいUser"
$

6
「pi」ユーザのオートログインを無効化します。「lightdm.conf」ファイルの内容を書き換えます。
以下のコマンドは編集用エディタとしてviを使っています。
「autologin-user=pi 」を「#autologin-user=pi 」に変更します。

$ sudo vi /etc/lightdm/lightdm.conf
#
# General configuration
#
# start-default-seat = True to always start one seat if none are defined in the configuration
# greeter-user = User to run greeter as
・・・・
#
# XDMCP Server configuration
・・・・
#autologin-user=pi   ←対象の行をコメントアウト(先頭に「#」を入れる)
・・・・

※ちなみにviの操作方法としては、次の通りです。
・カーソル位置の文字を消す →「x」で消去
・今のカーソル位置に文字を入れる→「i」で入力モード
・今のカーソル位置の一つ右に文字を入れる→「a」で入力モード
・入力モードの終了→「esc」
・保存して終了 →「:wq!」※入力モードを「esc」で解除後に入力


7
引き続き、「pi」ユーザのオートログインを無効化します。「autologin@.service」を編集します。

以下のコマンドは編集用エディタとしてviを使っています。
編集前:ExecStart=-/sbin/agetty –autologin pi –noclear %I $TERM
編集後:ExecStart=-/sbin/agetty –autologin “新しいUser” –noclear %I $TERM

$ sudo vi /etc/systemd/system/autologin@.service
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
・・・・
[Service]
# the VT is cleared by TTYVTDisallocate
ExecStart=-/sbin/agetty --autologin "新しいUser" --noclear %I $TERM ←対象の行にある「pi」を「"新しいUser" 」に変更
・・・

8
初期状態では、GUIモードで立ち上がっていて、その際のユーザは「pi」になっているので一度GUIモードをOFFにします。
設定を変更するには、「sudo raspi-config」を使います。

$ sudo raspi-config

以下のような画面が表示されるので、「1 System Options」ー「boot / Auto Login」を選択します。

8-1
「1 System Options」にカーソルを合わせて「Enter」キーを押します。
8-2
「boot / Auto Login」にカーソルを合わせて「Enter」キーを押します。
8-3
「B1 Console」にカーソルを合わせて「Enter」キーを押します。
8-4
画面が8-1に戻るので「Finish」にカーソルを合わせて「Enter」を押します。
8-5
再起動を聞いてくるので「Yes」にカーソルを合わせて「Enter」を押します。
※ここまでの操作を行うとRaspberry Pi が再起動します。再起動までしばらく待って次の手順に進んでください。

9
Raspberry Pi の再起動後にSSHを使って再度接続します。※この時、ユーザは新しい管理者ユーザを指定します。
$ ssh "新しいUser"@raspberrypi.local
"新しいUser"@raspberrypi.local's password: XXXXXXXXXX
Linux raspberrypi 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l 
・・・・
$

10
現在ログインしているユーザの中に「pi」ユーザがいないことを確認します。
もし、まだ「pi」ユーザが存在する場合は、6~9の作業を見直してください。

$ who
"新しいUser" pts/0 2021-06-17 08:34 (xxxxx::xxxxx:fxxxx:xxxxxx:xxxxx%xxxx)

11
「pi」ユーザを削除します。削除途中で現在ログインしている管理者ユーザのパスワードを聞かれますので入力します。
$ sudo userdel -r pi
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for "新しいUser": XXXXXXXXX
userdel: group pi not removed because it has other members.
userdel: pi mail spool (/var/mail/pi) not found

$
削除後に「pi」ユーザが存在しないことを確認します。
$ id -a pi
id: ‘pi’: no such user
以上で、「pi」ユーザから新しい管理者ユーザへの切り替えは完了です。
これ以降は、新しい管理者ユーザにてログインします。

SSHの設定変更

SSH設定を見直します。主にSSHに使用するポートを一般的な「22」から違うものに変更します。

SSH接続ポートの変更手順


1
管理者ユーザでSSH接続します。(これ以降は「raspiadmin」を管理者として記載します。)

$ ssh raspiadmin@raspberrypi.local
raspiadmin@raspberrypi.local's password: XXXXXXXXXX
Linux raspberrypi 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l 
・・・・
$

2
ラズパイの初期設定では、SSHのポート番号がデフォルトの「22」となっているため自分の好きなポート番号に変更します。
設定は「49152」~「65535」の間で指定できます。

以下のコマンドは編集用エディタとしてviを使っています。
編集前:#Port 22
編集後:Port XXXXX

$ sudo vi /etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
・・・・
Port XXXXX  ←文頭の「#」を削除し、ポート番号「22」を任意の番号に変更します。

3
保存後、SSHを再起動します。再起動後にログアウトします。

$ sudo /etc/init.d/ssh restart
[ ok ] Restarting ssh (via systemctl): ssh.service.
$ logout
Connection to raspberrypi.local closed.

先ほど設定したポート番号を「-p」オプションで指定してSSH接続します。(これ以降は「raspiadmin」を管理者として記載します。)

$ ssh raspiadmin@raspberrypi.local -p XXXXX
raspiadmin@raspberrypi.local's password: XXXXXXXXXX
Linux raspberrypi 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l 
・・・・
$

以上でSSHの設定変更は完了です。

 

rootによるSSHログインの禁止設定

安全のため、root ユーザでのSSH接続を禁止します。作業は管理者ユーザでログインし、sudoで権限昇格して行うほうが安全です。

rootによるSSHログインの禁止設定手順


1
管理者ユーザでSSH接続します。(これ以降は「raspiadmin」を管理者として記載します。)

$ ssh raspiadmin@raspberrypi.local
raspiadmin@raspberrypi.local's password: XXXXXXXXXX
Linux raspberrypi 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l 
・・・・
$

2
SSH設定ファイルをエディタで開きます。

以下のコマンドは編集用エディタとしてviを使っています。
編集前:#PermitRootLogin prohibit-password  (初期設定:パスワードのみではログインできず、認証キーが必要な設定)
編集後:PermitRootLogin no (完全にログインできない)

$ sudo vi /etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
・・・・
PermitRootLogin no  ←文頭の「#」を削除し、設定値を「no」に変更します。

保存後、ログオフして、root でログインできないことを確認します。

$ ssh root@raspberrypi.local -p XXXXX

パスワードは聞いてきますが、正解を入力しても権限がないと返されてログインできなくなります。

以上で、root によるSSHログインの禁止設定は完了です。

 

編集後記

いかがだったでしょうか。

悪意のあるユーザが存在しなければやる必要はない作業ですが、残念ながら必要ですよね。

Raspberry Pi もインターネットに接続することが多いので、本設定は最低限行ったほうが良いです。

その他、サービスを稼働させる際には各サービスのセキュリティ設定を行ってくださいね。

 

今回の記事は以上になります。