【ラズパイ】初期セキュリティについて

基本的にはSSH接続でRaspberryPiを運用するときの、最初にすべきセキュリティ設定をメモしておく。

前提としてインストール時に「pi」ユーザーのパスワードは「raspberry」と違うものを設定し、OSのアップデートは済ませているものとする。

以下、手順。

  • rootにパスワードを設定する
  • 新しいユーザーを作成し、「pi」ユーザーを消去
  • SSHの設定(rootログイン禁止、ポート変更、公開鍵認証等)

以前に書いたVPSサーバーの初期設定とも大体一致している。

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

RaspberryPiのrootにはパスワードが設定されていない、とネットでよく見るけど実際のところpiユーザーからsuコマンドを打ってもパスワード無し、piユーザーのパスワード共に通らずrootにはなれなかった。よく分からないけど別にパスワードを設定するのは手間ではないのでやっておく。

$ sudo passwd root

設定したいパスワードを入力すると、次からはsuコマンドでrootユーザーになれる。

新しいユーザーを作成し、「pi」ユーザーを消去

これはいくつか手順を踏む。

  • newuser(新しいユーザー)作成
  • newuserに権限付与
  • (任意)piユーザー内のファイルをごっそり新規ユーザーにコピー
  • piユーザーの自動ログインを無効化&newuserを自動ログインさせる
  • (任意)newuserで実際にパスワードログイン
  • 新規ユーザーがパスワード無しでsudoコマンドを実行できるようにする
  • メインPCで秘密鍵と公開鍵を作成
  • RaspberryPi側に.sshディレクトリ作成
  • 公開鍵をRaspberryPiに転送
  • 公開鍵をauthorized_keysに書き込み
  • パーミッション設定
  • newuserで公開鍵認証ログイン
  • piユーザーを削除

newuser(新しいユーザー)作成

$ sudo adduser newuser

名前を変える場合はnewuserの部分を変える。

コマンドを打つと、「newuser用のパスワード」「パスワード確認」を求められた後、「Full Name[]」というようなものがしばらく聞かれるが、特に入力する必要は無い。最後にYと入力してEnterを押せば作成完了。

newuserに権限付与

$ sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,spi,gpio newuser

要はpiユーザーが所属するグループ全部に、newuserも含めてやる。piグループにも含めるのはやりすぎ感があるが、まあ一応。piユーザーが所属するグループは以下のコマンドで確認できる。

$ groups pi

それぞれのグループの役割はここを参照。

(任意)piユーザー内のファイルをごっそり新規ユーザーにコピー

$ sudo cp -r /home/pi/* /home/newuser

cpコマンドはコピーコマンドで、Linux操作の超基本。-rはサブディレクトリも含めて全部コピー。/home/pi/*はpiユーザーのホームディレクトリにあるもの全部をコピー元とし、/home/newuserでそのコピー先を指定。

正直piユーザーで特に何もしていないならコピーする必要は無いと思う。自分で作った必要なファイルは自分で退避させる。

piユーザーの自動ログインを無効化&newuserを自動ログインさせる

$ sudo nano /etc/lightdm/lightdm.conf

126行目にあるautologin-user=piをコメントアウトする。その後

$ sudo nano /etc/systemd/system/autologin@.service

として、28行目の--autologin pi--autorogin newuserとする。

また、ブートをデスクトップのままにしているとどうしてもpiユーザーがログインしてしまう。ブート後CLIモードで立ち上げるように設定する。

$ sudo raspi-config

3 Boot OptionsB1 Desktop / CLIB1 Consoleを選ぶ。

こうすると、RaspberryPiにHDMIケーブルをつないで立ち上げてもCLIしか表示されなくなる。その場合、startxコマンドを打てばGUIが立ち上がる。(未検証)

(任意)newuserで実際にパスワードログイン

できるかどうかの確認。

新規ユーザーがパスワード無しでsudoコマンドを実行できるようにする

$ sudo visudo

最後にnewuser ALL=(ALL) NOPASSWD: ALLの一文を加えて保存終了をする。

メインPCで秘密鍵と公開鍵を作成

これはRaspberryPi上ではなく、通常使うPC上で行う。Windowsの場合、コンソールはコマンドプロンプトかPowerShellで。Macは知らん。

$ ssh-keygen -t rsa

作成した鍵の保存場所、パスフレーズ入力、再確認を求められる。終われば、指定した保存場所にid_rsaid_rsa.pubがそれぞれ作成されているはず。

以前に作ったことがあればそれを再利用することが可能。

RaspberryPi側に.sshディレクトリを作成

再度RaspberryPiにnewuserでログインして、以下を打つ。

$ mkdir ~/.ssh

ログイン直後なら~/は無くても可。~/はそのユーザーのホームディレクトリを指す。

公開鍵をRaspberryPiに転送

今度メインPC上に戻って、コンソールから以下を打つ。

$ scp .ssh/id_rsa.pub newuser@(RaspberryPiのIP):/home/newuser/.ssh

ログインパスワードを求められるので入力するとid_rsa.pubが転送される。

scpコマンドはセキュアな(つまり暗号化された)cpコマンドで、通常はネットワーク越しの転送に使う。メインPCからRaspberryPiへ、またはその逆のときに使えばよい。

公開鍵をauthorized_keysに書き込み

再再度RaspberryPiにnewuserでログインして以下を打つ。

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

これで、勝手にauthorized_keysというファイルが作成されて、id_rsa.pubの中身がコピーされる。

パーミッション設定

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

これをしないと公開鍵認証が動かない。

newuserで公開鍵認証ログイン

一旦RaspberryPiからログアウトし、メインPCのコンソールから以下を打つ。

$ ssh newuser@(RaspberryPiのIP)

ログインコマンドとしては同じだが、パスワードは聞かれない。秘密鍵にパスフレーズを設定していたらそっちを聞かれる。

piユーザーの削除

$ sudo userdel -r pi

確認コマンドは以下。

$ id -a pi
id: ‘pi’: no such user 

SSHの設定(rootログイン禁止、ポート変更、パスワード認証禁止等)

基本的には/etc/ssh/sshd_configというファイルを編集することになる。このファイルを開くコマンドは以下。

$ sudo nano /etc/ssh/sshd_config

これ以降は、上記のファイルを編集するということを前提にして説明していく。ちなみに行頭に#が付いてる行で、#の直後がスペースじゃないものはデフォルト値。

rootログイン禁止

#PermitRootLogin prohibit-password
↓
PermitRootLogin no

公開鍵を設定していないrootで、パスワードログインを禁止していたらそりゃできないでしょってことなんだけど、一応noとして完全禁止にする。

ポート変更

#Port 22
↓
Port (任意の数字)

任意と言っても、いろいろ予約されているポート番号があるので、49152 ~ 65535の間から選ぶようにする。

22番ポートというのはSSH用のポートとしてあまりにも有名だからハッキングを受けやすく、ほとんどの場合は変更するということになっている。でも結局自宅で運用するならルーターの設定をしっかりしておけばいいんだけど、まあ一応。

パスワードログインの無効化

#PasswordAuthentication yes
↓
PasswordAuthentication no

パスワードログインを有効にしているとでたらめにパスワードを入れられてひょっとしたら破られるかもしれないから。これは公開鍵でログインできることを確認してからでないとログインできなくなる。(その場合はモニターをつないで直接ログインするようにすれば何とかなるかも)

その他の設定

せっかくなので他の項目も知りたいという人は「sshd_config 解説」とかでググってください。最初は必要そうな項目について書こうかと思ったけど、結局初期値のままで良かったり、ユーザーが自分しかいないのであれば必要ない設定項目ばっかりだった。

SSHの再起動

$ sudo /etc/init.d/ssh restart

一旦ログアウトがてらにRaspberryPi自体を再起動して、再度ログイン。メインPCから

$ ssh newuser@(RaspberryPiのIP) -p (ポート番号)

とすればログインできるはず。

終了

お疲れさまでした。ちなみにルーターの設定(ポートフォワーディング)をしていない限りは外部からは入ってこれないはずなので、ここまで設定しなくてもいいんだけどね。

参考

初心者向!Raspberry Pi 最低限のセキュリティ設定【所要時間 30分】 – Qiita
ラズパイ入手したらまずやること、デフォルトユーザーとSSHログイン認証を変更する (1/3) – MONOist(モノイスト)
ラズパイでやらなければいけない4つのセキュリティ対策! – Qiita
Raspberry Pi Webサーバー セキュリティ設定 | アラコキからの Raspberry Pi 電子工作
ラズパイ4でpiユーザのIDを変更する方法 | rs-techdev
[Raspberry Pi] ラズパイ & Remmina on LinuxでRDP接続してリモートデスクトップさせてみる方法
Raspberry Pi3のLAN外からのSSH接続設定方法 – Qiita
Raspberry Piに外部ネットワークからアクセスできる様にして携帯でペットを遠隔監視する方法 – Qiita
セキュアなSSHサーバの設定 – Qiita
RaspberryPi 3 デフォルトユーザpiの変更 | そう備忘録
Raspberry PiのCLI/GUIログインの切り替え – ysdyt.net for tech memo

TCPフォワーディングについて
sshポートフォワーディングの使い方 – Qiita
SSHポートフォワーディング(トンネリング)とは: 小粋空間
【改訂版】SSHポートフォワード(SSHトンネル)【ローカル・リモート・ダイナミック総集編】 | ITログ
sshポートフォワーディングで詰まったら確認すること – Qiita
いますぐ実践! Linuxシステム管理 / Vol.102

Agentフォワーディングについて
ssh agent forwardingを行うサーバー側の要点の備忘録 – Qiita
ssh-agentを利用して、安全にSSH認証を行う – Qiita
ssh agent forwarding · JoeMPhilips

ゲートウェイポートについて
異なるprivateネットワーク内の端末をsshで繋ぐ – Qiita

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です