今回もRaspberryPiでNode-REDを触っていこうかないう感じですが、最初の熱が冷めるまえにどこまで行けるか、そこが勝負な感じ。
【関連する過去エントリー】
RaspberryPi2にNode-REDをインストールして使ってみる - uepon日々の備忘録
【RaspberryPi】Node-REDで簡単なWebサービスを作ってみる - uepon日々の備忘録
そんなところなんですが、前回のエントリーをアップしたところ、Facebookで以下のようなコメントをいただきました。
ご参考: Raspberry PiにおけるNode-REDの活用について https://qiita.com/utaani/items/7155c62d6c5e96822afb
ローカルであっても、FlowEditorにはパスワード設定を付けた方がいいです...
ローカルだしいいやって思ってたんですが、やっぱりそれぐらいのセキュリティは必要ですよね。ご尤もです。
教えていただいたURLは非常に有用な情報ばかりなのでNode-REDを使用する方はぜひ見てください。
そのなかで今回のセキュリティに関するのは以下の部分になります。
標準インストールしただけでは、IPアドレスがわかるとだれでもFlow Editorにアクセスできます。前述したようにRaspbianではpiユーザが管理者権限をもちますので、Flow Editorからexecノードを使われてしまうと管理者権限でRaspberry Piの全操作が可能になってしまいます。まったくインターネットからアクセスできないRaspberry Piでも、最低でもログイン画面設定は実施するようにしましょう。
ですよねー。ってことで設定を追加しましょう!
Node-REDのFlowEditorにパスワード設定を行う
参考通りに進めていくと/home/pi/.node-redにあるsettings.jsのファイルにあるadminAuth:の部分を検索してコメントアウト(//を外して)、
passwordエントリーの値を編集することになるようです。ここで値になるのはパスワードをハッシュ値をいれることになるので、平文をいれてもダメなようです。
ハッシュ値を出力するにはbcryptjsというパッケージを使用すればよいようです。
settings.jsの内容を確認して、編集する
では、settings.jsがあるか確認してみます。

ちゃんとありました…当たり前ですが。では該当の部分を編集していきます。最近はRaspberryPiのファイル編集するときにはVisual Studio Codeの拡張機能である
SSH FSを使用しています。

SSH FSの設定に関してはからあげさんの以下のエントリーが参考になります。
では改めて、settings.jsファイルの内容を確認してみます。

該当部分を拡大するとこの様になっています。下図中のマウスで反転している部分が該当部分です、この部分のコメント状態を外します。

非コメント化するとこんな感じになります。

続いてpasswordの値を削除します。(ちなみにusernameの値がadminがなっています。ログインユーザーネームを変更したい場合にはこの部分も変更しましょう)

この削除した部分に、新しく設定したパスワードのハッシュ値をコピー&ペーストを行っていきます。
ハッシュ値の生成は以下のコマンドで行います。はじめにディレクトリを変更しているのはそのまま2行目の実行を行うとbcryptjsの読み込みが行えないためです。
Node.jsのコマンドの-eスイッチは引数で与えた文字列をそのまま実行する機能になります。以下の例ではhogefugaという文字列のハッシュ値をコンソール上に出力するものになります。
$ cd /usr/lib/node_modules/node-red $ node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" hogefuga

参考によると
ハッシュ文字列は実行毎に異なる文字列で、$で始まりスラッシュやドットを含む60文字になりますので、間違いないようコピーペーストします。
とのことなので、あらためてハッシュ値を作成してコピー&ペーストします。
以下のように生成しましょう!
$ cd /usr/lib/node_modules/node-red $ node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" 【自分で決めたパスワードの平文】

ペーストするとこんな感じになるので、ファイルを保存します。(画像は見にくくなっていますが、password部分をマスクしています。)
ここまできたら、Node-REDの起動(node-redコマンドやnode-red-startコマンド)または再起動(node-red-restartコマンド)を行います。

無事に起動しました。ちょっと起動時のメッセージが今までとは違うような… そのあと、WEBブラウザでNode-REDへアクセスを行うと、ログインの画面が表示されます。
- mDNSが使える場合にはこっち→http://raspberrypi.local:1880/
- mDNSが使えない場合にはこっち→http://【RaspberryPiのIPアドレス】:1880/

ユーザー名とパスワードを入力すると…

無事にログインできました!

おわりに
これで、ローカル環境でもFlowEditorにはパスワード設定をして少しセキュアにすることができました。 実は設定のテキストファイルを触るのが面倒だなと思っていましたが、わかりやすいドキュメントがあって助かりますね。 セキュリティに関してはちゃんとやりましょう!
あんまり、内容がなかった…次こそは。
【Node-RED 関連エントリ-】