nyabot’s diary

電気猫の夢を見るお話

Raspberry pi のセキュリティ関連設定

前回のユーザー名変更に引き続き、セキュリティ関連のやったことの覚え書き。

sudoコマンド実行時のパスワード必須化について

ユーザー名を変更すると、sudoコマンド実行時にパスワードを求められるようになる。 /etc/sudoers.d/010_pi-nopasswdにユーザーpiはパスワード不要、という記述がされているため、必要に応じて削除したり変更したりする。

$ sudo nano /etc/sudoers.d/010_pi-nopasswd

SSH接続のポート番号変更

SSH接続のポート番号を広く知られる初期設定の22番から変更することで、悪意のあるロボットなどから攻撃を受けにくくする。
ポート番号は0~65535まであり、以下のように三つにわけられる。

ポート番号 名称 説明
0~1023 ウェルノウンポート 何に使用するか決められているポート。使用できないものが多い。
1024~49512 登録ポート 色々なソフトウェアによって割り当てられるポート。使用できるものもあるが、重複する可能性がある。
49513~65535 ダイナミック/プライベートポート 自由に使えるポート。

設定ファイルの記述「Port 22」のコメントアウトを外し、「Port 56789」など、49513~65535の任意のポート番号を指定。

$ sudo nano /etc/ssh/sshd_config

sshを再起動して、問題なく起動することを確認。

$ sudo /etc/init.d/ssh restart

ログアウトしてから、
指定外のポート番号では接続できないことをチェック。
ポート番号を指定して接続できることを確認。

$ exit

# 接続できない
$ ssh usr@198.xxx.xx.xx

# 接続できない
$ ssh usr@198.xxx.xx.xx -p 22

# 接続できる
$ ssh usr@198.xxx.xx.xx -p 56789

公開鍵認証の作成と設定

RSA鍵のペアを作成。

$ ssh-keygen -t rsa

鍵ファイルの保存場所を聞かれるので、/Users/tool-lab/.ssh/id_rsa_raspi に指定。(そのままにする場合は入力せずにEnterでok) パスフレーズも任意の値を設定。設定しない場合はそのままEnter。

ポート番号、送信ファイル、ユーザー名、IPアドレスを指定してscpコマンドで公開鍵ファイルを転送する。

$ scp -P 56789 .ssh/id_rsa_raspi.pub user@192.168.xx.xx

ラズパイにログイン後、.sshディレクトリを作成し、その中のauthorized_keysファイルに公開鍵情報を書き出し、パーミッションを変更して、ホームディレクトリの公開鍵ファイルは削除する。

$ mkdir .ssh
$ cat id_rsa_raspi.pub >> .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
$ rm id_rsa_raspi.pub

ポート番号を指定したときの設定ファイルをまた開いて、

$ sudo nano /etc/ssh/sshd_config

以下の記述を一番下に追加。

RSAAuthentication    yes
PubkeyAuthentication yes
AuthorizedKeysFile   %h/.ssh/authorized_keys
PasswordAuthentication no

保存して、sshサーバーを再起動。

$ sudo /etc/init.d/ssh restart

ログアウト。

$ exit

PCのssh設定を変更。

$ nano .ssh/config

以下の記述を追加して保存。IPアドレス、ユーザー名、ポート番号はそれぞれ設定した値を入れる。

Host raspi
    HostName IPアドレス
    User ユーザー名
    Port ポート番号
    IdentityFile ~/.ssh/id_rsa_raspi

以下のコマンドでログインできるようになれば成功!

$ ssh raspi

つづく。

Raspberry Piのユーザー名を変更する

Raspberry Piではユーザー名とパスワードは初期設定値が公開されているため、そのまま使うのはセキュリティ上のリスクになります。

正直どの程度危険性があるのか私はまだ理解できていないのですが、、端末にアクセスした人が誰でも操作できる状態、というのが良くないことはわかります。

今回OSを再インストールしたため、ユーザー名を変更しておきます。
(今まではパスワードは変えていたものの、ユーザー名は「pi」のまま使用していました。)

ユーザー名変更の手順は、以下の通り。

  1. Raspberry PiCLIで起動するようにしておく
  2. 仮ユーザーを追加する
  3. 仮ユーザーでログインし、既存のユーザー名(pi)を変更する
  4. 仮ユーザーを削除する
  5. (任意)Raspberry PiGUIで起動するように戻す

なお、事前にOSのインストールと初期設定、IPアドレスの固定を済ませ、SSHで別PCから接続して作業しています。

nyabot.hatenablog.com

nyabot.hatenablog.com

nyabot.hatenablog.com

Raspberry PiCLIで起動するようにしておく

まずは事前準備として、ラズパイをCLIで起動するように設定変更します。
SSHで別ユーザーでログインしても、同時にGUIではユーザー「pi」でログインされていて、「pi」を変更できない、という現象が発生する模様。若干ややこしいですね。 あらかじめ起動時のモードをCLIにしておくことで、ユーザー「pi」で自動ログインしないようにし、ユーザー名を変更できるようにします。

$ sudo raspi-config

設定画面が出てくるので、「3. Boot Options」→「B1 Desktop/CLI」→「B1 Console」と選択。終了して再起動。

仮ユーザーを追加する

先述の通りログイン中のユーザー名には変更を加えられないようなので、一時的に別のユーザーを追加し、そちらにログインした上で初期ユーザーを変更します。

# 仮ユーザー(tmp)を追加  
$ sudo useradd -M tmp  

# 仮ユーザー(tmp)をsudoグループに追加  
$ sudo gpasswd -a tmp sudo  

$ sudo passwd tmp  
新しいパスワード:{新しいパスワードを入力}  
新しいパスワードを再入力してください:{新しいパスワードを入力}

これで仮ユーザーの追加ができたので、一旦ログアウトします。

$ exit

仮ユーザー(tmp)でログインし、既存ユーザー(pi)を変更する

作成した仮ユーザー(tmp)でログインします。

$ ssh tmp@192.xxx.xx.xx

ユーザー(pi)の名前を、新しく設定するユーザー名(任意、ここではnewuser)に変更。

$ sudo usermod -l newuser pi

ホームディレクトリとグループを修正。

$ sudo usermod -d /home/newuser -m newuser  
$ sudo groupmod -n newuser pi

仮ユーザーを削除する

$ sudo userdel tmp

ユーザー名の変更関連は以上。

(任意)Raspberry PiGUIで起動するように戻す

VNCとかでGUIで動かせると便利なこともあるので、使うようであればGUI起動に戻しておきます。

$ sudo raspi-config

先ほどと同じ「3. Boot Options」→「B1 Desktop/CLI」から。

nyabot.hatenablog.com

VNC、最初はすごいと思ったけどぶっちゃけあんまり使わない、、

つづく。

Raspberry PiのKernelのバージョンを戻す

前回からLIRCを用いた赤外線の送受信について試行錯誤しています。
赤外線の送受信においてはより簡便なpigpioを用いた方法もネット上には色々上がっているものの、そちらを試したところ学習も発光もしていてエラーも吐かないのだけど機器の制御ができない、という困った状況に陥り、やはりLIRCを使おうと思い直した次第。

しかし、どうやらラズパイのカーネルのバージョンが4.19の場合、LIRCではエアコンのような長い信号は制御ができないらしいので、カーネルのバージョンを4.14以前の古いものに戻すことにします。

戻したいカーネルハッシュ値githubのページ(https://github.com/Hexxeh/rpi-firmware/commits/master)から取得し、以下のコマンドを実行。

$ sudo rpi-update {ハッシュ値}

e.g.) kernel 4.14.98 に戻す場合

$ sudo rpi-update a08ece3d48c3c40bf1b501772af9933249c11c5b

それなりに時間がかかるので、待ちます。
私は待っている間に、この備忘録を書いたりロボットの可動軸数を考えたりしてます。

f:id:sizohu:20200203163749p:plain

完了したら、再起動して確認。

$ sudo reboot
$ uname -a

f:id:sizohu:20200203163938p:plain

OK!

つづく。

LIRCを用いた赤外線送受信をRaspberry Piで行う

Raspberry Piにおける、LIRCを用いた赤外線の受信および解析と、送信について。
OSとkernelのバージョンに応じて、動作させるまでの方法が異なります。

以下の書籍と、そのサポートページに完全な方法が記載されています。

↓サポートページ

raspibb2.blogspot.com

raspibb2.blogspot.com

ちなみに、今回私は「Raspbian Stretch + kernel 4.19」で実際に赤外線の受信および送信ができました!
(書籍の補足情報を見つけるまではあれこれやってみるもののうまくいかず、かなり苦労しました。。)

ネットでも検索をかけると赤外線リモコンの記事がいくつも出てきますが、ほとんどは(このブログのような)メモや備忘録にとどまり、自分の環境とは異なることがしばしばあります。
開発元のマニュアルを読み込むのが正攻法なのかもしれませんが、英語だしなかなかにハードルが高い……。
こうして書籍などでバージョンごとの導入手順がまとめられていると、初学者にとってはとてもありがたいですね。

次はエアコンの操作を……と思いきや、kernel 4.19ではエアコンのような長い信号を受け付けないみたい?
バージョンを下げてやり直すことになりそう。

つづく。

格安デルタ型3Dプリンター「Kossel Linear Plus」の購入から動作確認まで

初めての3Dプリンターを購入してみたのでまとめ。

経緯・比較

購入を検討するに至った経緯を少し書いておきます。同じようなことしている方(いるのだろうか)には参考になるかも。
(プリンターに直接関係ない話なので興味ない方は読み飛ばしてOK.)

私は一年以上前からロボットを作っており、試作機ではアルミ板を切ったり折ったりしてボディを作成したのだけれど、以下のような課題がありました。

  • 重量
  • 加工の難度
  • 形状の自由度

まず、金属は重く、軽量なアルミでも使用する量によってはかなりの重さになること。重量があると、その分動作に必要なサーボモータのトルクも大きくなり、消費電力も多くなり、必要なコストもかさみます。
特にバッテリーは容量と出力電流を考慮する必要があるのだけど、高トルクなサーボを複数動かせるもの、という条件がかなり厳しい。高出力なバッテリーは扱いも難しく、爆発や発火の危険性もあるため、素人としてはできれば手を出したくない。

次に、加工の手間について。
金属板でパーツを作るとすると、大まかに次のような工程になります。

  1. 設計図を作る
  2. 金属板に線を引く
  3. 切る
  4. 穴を開ける
  5. 折り曲げる

特に、金属を切って穴を開けて折る、というのが思ったより大変で、とても時間がかかるし手も痛くなる。

そして、形状の自由度。金属板の場合、作れる形状にもかなり制限が出ます。
切ったり曲げたり、というのが紙くらい簡単にできれば形も自由に作れるのだろうけれど、滑らかなカーブとか細かなパーツはなかなかうまく作れない。曲げる時や穴を開けるときに、あるいはそれらを組み合わせたときに、どうしてもミリ単位で誤差が出てきてしまう。加工のしやすさと強度はトレードオフで仕方ない、とは思うのですが……。

見た目も動作もより良いロボットを作ろうと思うと、金属板の手加工では限界があることが目に見えていました。
かといって、金属を本格的に加工しようとすると、必要な技術も費用も趣味では済まないレベルになりそう。

そこで、3Dプリンターに目をつけました。これなら最低限の学習と費用で、もっと自由にロボットが作れるのでは、と思ったわけです。

3Dプリンターの種類 FDMと光造形

調べてみると、現在家庭用の3Dプリンターは出力方法で大きく二種類に分けられ、それぞれ「FDM(熱溶解方式)」と「光造形」と呼ばれるみたい。

二種類のプリンターの違いをまとめるとこんな感じ。 *各項目は主観かつ相対評価

FDM 光造形
造形精度 低い 高い
出力できる材質 PLA,ABSなど 光硬化レジン
出力サイズ 大きめ 小さめ
印刷の手間 あまりかからない 手間がかかる
印刷コスト(材料) 安い 高い

FDMでも使うフィラメントによっては高コストだったりするし、設定やなんやかんやを考えたら手間もあまり変わらないのかもしれません。

私の用途の場合、そこまで高精度の造形は求めないので、出力の大きさや強度と、扱いやすそうなことからFDMに決定。

さらに、FDMのプリンターはその構造によっていくつかの種類に分けられるそう。 今回購入したKossel Linear Plusはデルタ型と呼ばれるものです。

↓こんな感じのやつ

ANYCUBIC Predator 3Dプリンター 高精度 停電回復機能 DIYキット 組立易い 安定 印刷サイズ 370×370×455mm 大型/工業級 FDM デルタ 金属製 Delta 3D printer フィラメント付き (3D プリンター)

Kossel Pro DIY 高精度3Dプリンター デルタ型金属製3Dプリンター 組立キット 最大プリントサイズ250x250x380 3.5インチのタッチスクリーン スデッピングモータドランバ付き 超静かプリント 操作簡単 組立しやすい

昔のSF映画に出てきそう。かっこいい。 ざっと調べたデルタ型のメリット・デメリットは以下。

  • 精度が高い(?)
  • 動作音が比較的小さい
  • 設置面積が比較的小さい
  • 国内ネットショップでの取り扱いが少ない
  • 国内のレビューが少ない
  • 作るのがやや大変
  • かっこいい

他の形のプリンターと比べ、デルタ型は三つのモーターで動作を制御するパラレルリンクという機構になっており、精度が高い……らしい。 実際のところ、しっかりと調整されたプリンターはどれも違わないとか、デルタ型の方が精度を高めにくい、とかいう話もあったのでわかりません。

何かの商品とかツールを選ぶときは、基本的にはユーザーが多いものを選ぶべき、と私は考えています。トラブルが発生した時に、ネット上に同様の事例の情報があるとないとで苦労が全然違うためです。 その点、安価なKosselやKossel Linear Plusは日本のAmazonでは取り扱い終了していたり、製品について書かれているブログサイトも1,2件しかなかったり(しかも現在のバージョンと違ったり)と、かなり情報が少ない様子。自分の頭で解決できない問題が起きたら詰みそう。

色々調べたところ、低価格のFDM方式の3Dプリンターでは、Ender3というのが日本では人気みたいで良さそう。
でも結局、見た目のかっこよさに抗えず。デルタ型ってなんか近未来感あるしさ。

購入

Kossel Linear Plusは前述の通り、国内ネットショップでは販売終了していました(2019/11現在)。3Dプリンターは日本ではまだ多分ニッチでその割に競合が多いから、なかなか厳しいのかも。
そこで、海外通販サイトを利用して個人輸入することに。ハードルの低いいくつかの海外通販サイトの中で、今回は中国の通販サイトであるAliexpressを利用します。

なお、その他のデルタ型3Dプリンターは国内でもいくつかあったものの、値段が高かったり評価がイマイチだったり。
趣味で色々作る人なら少し奮発して高価なプリンターを買うといいかもしれません。
私はロボットのパーツを作りたいだけで、さらに言えばどの程度使うかもわからないものに5万も10万も出すのはちょっと…というプアなのでケチる。(できることとか商品の作りを考えたら5万10万が妥当な金額な気はする。)

購入方法と購入金額

AliExpressの11.11セールで購入。 セラーは「AnycubicBrand Sore」さん。 購入時の価格は送料込みで18500円ほど。そこからAliExpressの11.11の割引があったので実質17000円くらいでした。

購入したのは「Linear plus add 1KG」という商品と1kgのPLAをセットにしたもの。 フィラメントの追加なしのものはさらに1000円安かったのだけれど、フィラメント単品で買うと2000円はするので、色の指定はできないけどお得と思いこちらに。

ちなみに同セールではラズパイ用カメラモジュールが900円弱、USBマイクが6円(!?)で送料込み、とかだったのでたかが1000円などとはとても言えない。セールすごい。安く買えるものは安く買って、浮いたお金で他のモジュールを買ったり量産を目指したりするんだ。

懸念点

海外通販ということで、いくつかの懸念点もありました。

  • プラグ
  • 関税
  • 品質面、保証など

DIY製品ということで当然組み立ても心配だったけれど、組み立てについては後述。

プラグの種類

今まで考えたこともなく知らなかったのですが、国によって電化製品のプラグやコンセントの種類が違うのですね。
日本のプラグの形式は「USタイプ」らしい。製品によってはプラグのタイプが違うので、もしかしたら変換プラグを用意しないといけない。
事前にセラーに尋ねたら、「購入時に伝えてくれればUSプラグを送るよ」、とのこと。
メッセージのやり取りは全て英語。勉強した英語を思い出しつつ、最終的にはGoogle翻訳に頼る。
注文時にメッセージを添えられるので、そこに「USプラグ」プリーズって書く。簡潔に書けばとりあえずわかってくれます。多分。

変換プラグを購入

届いた商品には、きちんとUSプラグが同梱されていた。素晴らしいセラー。 でもプラグの先が3つ出ている、3ピンタイプのUSプラグでした。これは想定外。プラグも奥が深い。
わが家には対応するコンセントはなかったので、3ピン→2ピン変換プラグを追加で購入。Amazonで300円弱くらい。

エレコム 電源タップ 変換アダプタ 3ピン→2ピン アース付きコンセント T-H32

エレコム 電源タップ 変換アダプタ 3ピン→2ピン アース付きコンセント T-H32

関税

本体価格が免税範囲内に収まっていたので関税はかからず。
もう数千円以上高いプリンターだと輸入に関税もかかるはずなので、保証とか考えると国内のAmazon等で買ったほうがいいのかも。

品質、部品の状態など

  • 本体付属のPLAは1kg、工具も付属

付属のフィラメントはテスト用の数百グラム程度かと思ったら、なんと1kgもついててびっくり。色は白。
セットで購入したフィラメント(こちらは色は透明でした)は、当分開けずに保管しておくことに。
ニッパー、ドライバー、六角レンチとか工具も一通り入っていて、付属品は至れり尽くせりといった印象。

組み立て

おそらく最初にして最大の難所、組み立てと配線。
Youtubeで組み立てレビューを投稿されている素晴らしい方がいらっしゃったので、貼っておきます。


3Dプリンター 組み立て Kossel Plus Anycubic製 assemble デルタ型 Delta 3D printer

上記動画がほぼそのまま(電源ユニットの配線周りは私のと違っていた)なので、これから購入・組み立てする人はぜひ参考に。
動画ほどサクサクは作れないものの、これでできそうだな、と思えるなら多分できる。たぶん。

組み立てを終えたところ、部品に不備は一つもなく、組み立てに無理があるようなところもなし。
7ステップでできる、という説明書なのだけど、ステップごとに使用するネジ類も予め小分けされていてわかりやすい。
ただし気になる部分もあり。

  • 電源からのコードが二組一緒になっていて、一度分解しないとそれぞれどちらかわからない
  • ヒーターのコードが説明書だと赤と黒なのに赤と赤になっている(上記動画でも言及されている)
  • 説明書通りに作るだけだと上のリミットスイッチに全く当たらない

電子工作とか少しでもやっている人は配線等も抵抗ないはず。そうじゃない人には、少し(コードの色違いとかはかなり)不親切かも。個人的にはこういう不親切さもDIYらしくて嫌いじゃないです。

印刷

組み立てと配線が終わったら、いざ印刷! 印刷と呼ぶべきか出力とか造成とか呼ぶべきか迷う。プリンターだから印刷でいいのかな?

印刷するデータの準備

  • 自分で作る
  • 誰かが作ったものを使う

3Dプリント用データの共有サイトとかもあるので、自分でデータを作れなくてもそれなりに楽しめそう。 プリンターに付属のSDカードにもテストプリント用のSTLデータがいくつか入っている。

そのままのSTLデータではプリントできないので、curaでgcodeにして印刷します。

curaのインストールと設定

説明書にもインストール方法が書かれていたり、SDカードにインストーラーが入ってたりするけど、公式サイトからダウンロードしました。
バージョンが新しくなっていたので、最新のものを使用(Ver.4.4)

プリンターのプロファイルを設定

curaには「Kossel Linear Plus」のプロファイルが用意されていないので、以下のプロファイルを入れました。

www.thingiverse.com

とてもありがたい……!

テストプリント

印刷の手順は商品に付属している説明書通り。フィラメントをセットしておき、自動レベリングユニットを取り付けてまずはZ軸とレベリングの調整。 調整を終えたらいよいよ印刷。アームが動くたびにちょっとドキドキする。ヒートベッドとノズルの加熱が2分くらい(PLA)。

f:id:sizohu:20191126201723j:plain

f:id:sizohu:20191126201731j:plain

f:id:sizohu:20191126201742j:plain

有名な?ベンチマーク用のボート模型。ネット上でよく見かけるモデル。 全体的に直線も曲線も綺麗に出ていて、十分満足できる結果に。というよりむしろ想像以上に綺麗にできて感動。

  • Maker Fare Robotくん

f:id:sizohu:20191126202835j:plain

f:id:sizohu:20191126202844j:plain

日本でも盛り上がりつつあるMaker Fareのロボット君。よく知らないけどかわいくて可動するよう設計されていたので、気になって印刷してみた。すごい。

プリントの様子

初めてタイムラプス使った。

感想とか

組み立てたりするのが好きな人、機械が好きな人ならオススメ。半分できているとはいえ、自分で組んで配線した機械がガシャガシャ動くのはかなり楽しい。

説明書通りに組めばできるとはいえ、若干説明書と違うところがあったり、説明が省かれている箇所もあったりするため、工作とかが苦手な人には正直あまりおすすめできない気がします。Amazonの商品説明に、「DIY好き、根性がよい、経験がある人にオススメ!」って書かれていてすごい翻訳だなと笑ったけどあながち間違いじゃないかも。
配線込みで組み上げるまでになんだかんだで4,5時間かかりました。
作業量はそこまで多くないので、構造がわかっている人が組むなら2時間もかからなそう。

印刷物の品質には大満足。
もしかしたら、大きなサイズやより高精度が求められるモデルを作ったり、他のフィラメントを使ったりすると徐々に不満も出てくるのかもしれませんが、今のところ全く問題はありません。
買ってよかった!

3DCADを勉強中なので、次は自分の作成したモデルを印刷するのが楽しみ。
つづく。