Raspberry Pi の環境構築手順メモ
前提条件
Raspberry Pi OS (Raspbian) を使用します。でもUbuntu
であっても設定方法は違いますが、やりたいことは同じだと思います。
OSのイメージのSDカードへの書き込む
EtcherかRaspberry Pi ImagerでOSのイメージのSDカードへの書き込みます。
環境設定
環境設定コマンドがあるので有難く使わせてもらいましょう。
$ sudo raspi-config
パスワードの変更
1 Change User Password
を選択してデフォルトパスワードを変更します。
ホスト名の変更
2 Network Options
> N1 Hostname
を選択してホスト名を変更します。
Wi-Fiの設定
2 Network Options
>N2 Wireless LAN
を選択- 初回は
WLAN Country
の選択が促されるのでJapan
を選択 -
4 Localisation Options
>I4 Change WLAN Country
から再設定できます - 無線LANのSSIDとパスワードを設定
ロケールの設定
日本語で使いたい場合は設定してください。テラタームなどで日本語になります。しかしraspi本体は文字化けします。
4 Localisation Options
>I1 Change Locale
を選択ja_JP.UTF-8 UTF-8
をスペースキーでチェックしてエンター- システム全体のデフォルトロケールを尋ねられるので
ja_JP.UTF-8
を選択
タイムゾーン
4 Localisation Options
>I2 Change Timezone
を選択Asia
>Tokyo
を選択
SSH serverの有効化/無効化
5 Interfacing Options
-P2 SSH
を選択
Would you like the SSH Server to be enabled?
- と聞かれるので
Yes
を選択No
を選択した場合は無効となります
セキュリティ対策
1. デフォルトユーザーの「pi」を削除する
初期状態では、デフォルトユーザーの「pi」とパスワード「raspberry」が準備されています。がこれはインターネットに出回っているため外部公開する場合は危険です。よってオンリーワンなユーザーを作成してデフォルトユーザーの「pi」を削除します。
1-1. rootのパスワードを設定
初期状態では、スーパーユーザーのroot
がパスワードで保護されていません。この状態では全ての操作がパスワード無しで実行可能となってしまいます。よってroot
にパスワードを設定します。
$ sudo passwd root Enter new UNIX password: #rootのパスワードを設定 Retype new UNIX password: #パスワードを再入力 passwd: password updated successfully
1-2. ユーザーの追加
$ sudo adduser 〇〇 # 〇〇というユーザーを追加 : Enter new UNIX password: #新しく作成するユーザーのパスワードを設定 Retype new UNIX password: #パスワードの再入力 passwd: password updated successfully Changing the user information for 〇〇 Enter the new value, or press ENTER for the default Full Name []: #入力の必要なければそのままEnter Room Number []: #同上 Work Phone []: #同上 Home Phone []: #同上 Other []: #同上 Is the information correct? [Y/n] Y #「Y」と入力してEnter
1-3. 管理者権限の付与
piユーザーが属するグループを確認して同じグループに新規ユーザーを登録します。
# piユーザーが属するグループを表示 $ groups pi pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio # 同じグループに新規ユーザーを登録 $ sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio 〇〇 # ラズパイからログアウトして新規ユーザーでログインできることを確認してください $ exit
1-4. 新規ユーザーがパスワードなしでsudoを実行できるようにする
sudo 設定ファイルを以下のコマンドで開きます。
$ sudo visudo
以下を挿入して保存します
#includedir /etc/sudoers.d 〇〇 ALL=(ALL) NOPASSWD: ALL # 挿入
piユーザをsudoグループから外します
$ sudo gpasswd -d pi sudo
Removing user pi from group sudo
piユーザを削除します
# ユーザーを確認 $ id -a pi uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),999(spi),998(i2c),997(gpio) # 削除 $ sudo userdel -r pi userdel: group pi not removed because it has other members. userdel: pi mail spool (/var/mail/pi) not found # 削除されていることを確認 $ id -a pi id: ‘pi’: no such user
2. ログイン方式を公開鍵暗号方式にする
2-1. 鍵の作成
作成方法は色々ありますが、私はテラタームで作成しました。ラズパイではなく別のマシンでの作業なので省略しますが、作成した公開鍵id_rsa.pub
や秘密鍵id_rsa
は決まったディレクトリに配置しないといけません。(Windowsマシンであろうとラズパイであろうと)
Windowsの場合はC:\Users\{ユーザー名}\.ssh
ですし、ラズパイの場合は~/.ssh
です。
2-2. ラズパイに公開鍵を送信
公開鍵の転送先ディレクトリを作成します。
# ラズパイのホームディレクトリに.sshディレクトリを作成 $ mkdir ~/.ssh
そこに2-1. 鍵の作成
で作成した公開鍵id_rsa.pub
を配置します。私はテラタームを使って転送しました。
2-3. 公開鍵のパーミッションを変更
# パーミッションを700に変更 $ chmod 700 ~/.ssh # id_rsa.pubの内容をauthorized_keysに書き込み $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # パーミッションを600に変更 $ chmod 600 ~/.ssh/authorized_keys # 不要となったid_rsa.pubを削除 $ rm ~/.ssh/id_rsa.pub
2-4. SSHの設定ファイルを変更
# SSHの設定ファイル
$ sudo nano /etc/ssh/sshd_config
下記の5カ所を変更します
: #Port 22 Port 61234 # SSHポート番号を変更 : #PermitRootLogin prohibit-password PermitRootLogin no # rootでログインできないようにする : #PubkeyAuthentication yes PubkeyAuthentication yes # 公開鍵でログインできるようにする (デフォルトでなっているのでしょうけど) : #PasswordAuthentication yes PasswordAuthentication no # パスワードでログインできないようにする #PermitEmptyPasswords no PermitEmptyPasswords no # パスワードなしのログインを禁止する :
2-5. SSHの再起動
sudo systemctl restart sshd
でSSHを再起動します
ステップアップ:SSH接続をスムーズに
.ssh
(Windowsの場合はC:\Users\{ユーザー名}\.ssh
)配下にconfig
ファイルを作成します。内容は以下
Host raspi HostName 192.168.XXX.XXX (場合によってはHostName.localとすることも) User {ラズパイのユーザー名} port {SSHのポート} IdentityFile {秘密鍵のパス}
コマンドプロンプトであれば以下のコマンドによりSSH接続することができます。
> ssh raspi
ステップアップ:ログを監視/通知する (Slackと連携) ※準備中...
ログファイルを監視し、SSH接続時にSlackへ通知を飛ばします。
Slack側の準備
Slack
というチャットツールのIncoming Webhook
を使用します。
監視プログラムを作成 (Python)
テスト実行
以下のコマンドで実行します
$ python3 run.py
SSHで接続すると通知がくることを確認します
ログアウト後も実行状態を継続させる
以下のコマンドで実行します
$ nohup python3 run.py > /dev/null 2>&1 &
プロセスの終了はkill
コマンドからプロセスIDを指定して強制終了させます
# プロセスID確認 $ ps aux | grep run.py
# プロセス強制終了 $ kill 444
起動時に自動実行させる
# サービスの作成
$ sudo nano /etc/systemd/system/logmonitors.service
[Unit] Description=Log Monitors [Service] ExecStart=/usr/bin/python3 /home/xxx [Install] WantedBy=multi-user.target
# systemdに登録 $ sudo systemctl enable logmonitors.service
# systemdに登録 $ sudo systemctl start logmonitors.service