こんにちは、たねやつです。
前回まででRaspberry Piがインターネットに接続(外部のサーバーへのping疎通確認)が完了しました。
この時点で皆さんのやりたいことをどんどん進めていけるわけですが、最後にちょこっとだけ追加の設定を行います!
前の記事
外部のPCから接続する
前回の設定で外部からのSSH接続を有効にしたので、別のPCからアクセスしてみます。
コマンドプロンプト / PowerShell / ターミナルを利用する
Windowsの場合はコマンドプロンプトまたはPowerShell(Windows 10以降のみ)、Macの場合はターミナルというアプリを使用します。
Windows
Windows + Rを押すことでプログラム名を指定して実行というポップアップが表示されます。(Windowsキーは左Ctrlあたりにあるロゴのキーです)
そこにcmdと打ち込んでエンターを押すと、Raspberry Piとよく似た画面が表示されます(;'∀') この画面がコマンドプロンプトです。小さい頃に学校のPCで起動してipconfig /allとか実行してハッカー気取りとかやりませんでした?(笑)
そんな話はさておき、、、とりあえず起動できていれば下のsshコマンドまで進んで下さい👏
cmdの代わりにpowershellでPowerShellを起動することもできます。こちらのほうがより新しくいろんなことができるようです。
Mac
アプリケーション内のユーティリティというディレクトリの中にあるそうです。(私自身OSXの端末を所持していないので確認できていません。。。😣)
ssh コマンド
それではコマンドを実行していきます。WindowsでもMacでも実行するコマンドはssh pi@[Raspberry PiのIPアドレス]です!SSH接続するIPアドレスの前に[ユーザー名]@をつけることでそのユーザーでログインすることになります。何も指定しない場合には、現在ログインしているユーザー名でログインすることになります。(まだユーザーを追加していないので必ず失敗します)
$ ssh pi@192.168.11.50 The authenticity of host '192.168.11.50 (192.168.11.50)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no)? yes
実行するとこのような文章が表示されます。これはRaspberry Pi側から提示されている公開鍵をまだ持っていないけど大丈夫?という感じの確認となっています。key fingerprint is以降に暗号方式と暗号文が書いてあります。これは端末によって一意となるものです。
初めてアクセスする端末ではもちろん保存されていないのでyesと入力してエンターキーを押します。これでIPアドレスと公開鍵のセットでSSH接続している端末に保存されます。Windowsの場合はC:\Users\ユーザー名\.ssh\known_hostsというファイルに追記されます。
パスワードを要求されるのでraspberryと入力してログインします。無事ログインできるとRaspberry Piで見ていた画面がそのまま表示されます!
接続できない場合は以下の点を確認してみてください。
- Raspberry Piの電源は入っているか
- sshコマンドで指定するIPアドレスは正しいか
pi@をIPアドレスの前につけているか- パスワードは間違っていないか
- Raspberry Pi側でSSH接続が本当に有効になっているか
接続できれば次に進めていきます。
今後使用するユーザーを追加する
現在の設定ではpiユーザーからsudoコマンドを使用して管理者権限を取得しながら大事な設定を行ってきましたが、デフォルトで用意されているユーザーをそのまま使い続けるのはセキュリティ面においてかなり危険です。
例えばInsecamというWEBサイトではオンラインのWEBカメラで閲覧のためにパスワードが設定されていないものを勝手に公開しています。(アクセスすると相手のWEBカメラを運用しているサーバーに自分のIPアドレスが通知されるためアクセスしないほうが無難です。)
デフォルトのユーザー・パスワードで運用することは、パスワードをかけないまま運用することと同義です。
今はまだ外部に無線LANルーターが適切に設定してくれているおかげで直接はRaspberry Piに自宅外からアクセスすることはできません。がデフォルトから変更しておくことに越したことはないです。
それに自分の名前のユーザーも作れるのでより一層愛着がわくと思います😍
以下の手順でpiユーザーと同じ権限を持った新しいユーザーを作成します。
adduser コマンド
adduserコマンドを使用することで新たにユーザーを追加することができます。このコマンドを使うためには管理者権限が必要なためsudoコマンドと一緒に使用します。例としてtaneyatsというユーザーを追加しています。
$ sudo adduser taneyats
Adding user `taneyats' ...
Adding new group `taneyats' (1002) ...
Adding new user `taneyats' (1002) with group `taneyats' ...
Creating home directory `/home/taneyats' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for taneyats
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
Enter new UNIX password:まで進んだら新たに設定するパスワードを入力してください。再確認用の入力も求められるので同じものを入力してください。
Full Name []:まで進むとまた入力を求められますが、基本的にはエンターキー連打で進めてしまって問題ないです。ユーザー情報の追加の項目なのですがRaspberry Piを動かすうえでは一切必要ない情報です👍
Is the information correct? [Y/n]まで進んだらYと入力して完了します。Yがデフォルトの選択肢になっているのでそのままエンターキーを押してしまっても問題ないです。
それでは早速追加したユーザーに切り替えてみましょう!
su コマンド
Windowsで使っているときではあまり想像できないかもしれないですが、Linuxでは結構頻繁にユーザーを切り替えて作業することがあります。データベースサーバーやWEBサーバーなどを運用するときにはそれ専用のユーザーを作成して処理を実行することが多いです。
そのためか(?)、ユーザーの切り替えもコマンド一つで簡単に行うことができます。(実際には切り替えというよりも現在ログインしているユーザーで別のユーザーにログインするというほうが正しいです)
su - [ユーザー名]で指定したユーザーに切り替えることができます。コマンドとユーザーの間のハイフンを忘れないようにしてください!これを指定することによって新たにログインしたユーザーのホームディレクトリへ移動します。他にも大事な役割はありますが、それは別記事で紹介します👏
$ su - taneyats Password: taneyats@raspberrypi ~ $
簡単ですね!ログインできることが確認出来たら一旦このユーザーからはログアウトして元のpiユーザーに戻ります。exitコマンドを実行すると現在ログインしているユーザーからログアウトします。
taneyats@raspberrypi ~ $ exit logout pi@raspberrypi ~ $
groups コマンド
Linuxでのグループについて
新たにユーザーを追加しましたが、
Linuxにはユーザーが所属する、グループという実行できるコマンドの権限をまとめるという概念があります。
例えば今まで実行していたsudoというコマンドは管理者権限を取得するためのコマンドで、誰でも実行できてしまうとPCを停止させたりデータを全削除できたりしてしまうので危険です。そのためsudoというグループに所属しているユーザーだけがsudoコマンドを実行できるようにする、というような方法がとられています。
今新たに追加したユーザーでsudoを実行しようとすると怒られます。
$ su - taneyats
$ sudo su - root
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 taneyats:
taneyats is not in the sudoers file. This incident will be reported.
「大いなる力には大いなる責任が伴う」と。ベンおじさんの名言ですね🤔
ですのでpiの所属しているグループを今回の新しいユーザーにも適応します。
所属するグループを確認する
groups [ユーザー名]で所属しているグループを確認することができます。
$ groups pi pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio
この中でpiというグループ以外のグループを新たなユーザーに適応させます。sudoというグループがあるのがわかります。
usermod コマンド
piの所属しているグループが確認できたので新しく追加したユーザーも所属させます。
usemod -G -a [グループ1,グループ2,...] [ユーザー名]で追加することができます。-Gオプションを適用することでグループに関する設定を変更することができるようになります。-aオプションをつけることでもともと所属しているグループを保持しながら新たに指定したグループを追加します。このオプションをつけないと今所属しているグループから離脱することになるので、必ずつけてください!
グループはカンマ区切りでしか複数指定できないので、以下のように加工したものを使用します。
adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi
$ sudo usermod adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi taneyats $ groups taneyats taneyats adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi
groupsコマンドで成功していることを確認したら完了です。
試しに新しいユーザーでsudoコマンドが実行できるかどうか確認します。
$ su - taneyats Password: $ sudo -s [sudo] password for taneyats: root@raspberrypi:/home/taneyats # exit
rootユーザーでログインできていれば成功です。$が#に変わっていますね!とりあえずexitでログアウトしておきましょう。
piユーザーを削除する
新たなユーザーにpiの所属していたグループを移し終えたので削除します。
新しいユーザーでログインしなおす
削除するユーザーがログイン状態だと削除できないのでいったんpiからログアウトし、再度Windowsなどからssh接続を行います。今回最初にログインするユーザーは先ほど追加したユーザーを指定します。
> ssh taneyats@192.168.11.50
ログインできたら次に進みます。
userdel コマンド
userdel [ユーザー名]で削除できます。このコマンドにも管理者権限が必要なのでsudoと一緒に使います。
$ sudo userdel pi $ su - taneyats No passwd entry for user 'taneyats'
削除に成功していればsu -でユーザーを変更することができなくなります。これで完了です。
rootユーザーのパスワードを設定する
現状ではsudoコマンドを利用してrootユーザーになることはできますが、がっつり管理者権限で実行したいときには毎回実行するのが面倒になってきます。
初期状態ではrootユーザーにはパスワードは設定されていない(=sudo -sでしかログインできない)状態なので設定しておきましょう😏
passwdコマンド
passwd [ユーザー名]で指定したユーザーのパスワードを変更することができます。rootだけでなく、先ほどのように新たに追加したユーザーのパスワードも変更することができます。
$ sudo passwd root
設定し終えたら完了です。現在はsudoグループのユーザーが管理者権限で実行することができるので大丈夫ですが、rootユーザーのパスワードを忘れてしまうとかなり面倒なことになるので注意してください。
apt-getでソフトを最新の状態に更新する
ここまでで一通りの初期設定は完了です。最後にRaspberry Piにインストールされているソフト(パッケージ)を最新に更新しておしまいにします。
apt-get update
インストールされているパッケージの追加・更新や削除などの管理を行うためのコマンドがapt-getです。これも管理者権限が必要なのでsudoとともに使用します。
apt-get updateを実行することでインストールできるパッケージリストを更新します。
Windowsで新たにソフトをインストールするときと大きく異なって、Linuxではあらかじめソフトと最新バージョンの一覧を取得してきて、それと現在インストールされているソフトを照らし合わせて更新や、インストールを行います。apt-get updateはその一覧を最新に更新するために実行します。
$ sudo apt-get update Get:1 http://raspbian.raspberrypi.org/raspbian stretch InRelease [15.0 kB] Get:2 http://archive.raspberrypi.org/debian stretch InRelease [25.4 kB] ... Reading package lists... Done
このコマンドだけだと一覧を更新しただけなので最新のパッケージにはまだ更新されていません。
apt-get upgrade
apt-get upgradeを行うことで最新に更新されます。おそらく公式の最新のOSを導入したので更新されるものはそこまで多くないと思いますが、数か月ぶりに実行すると数時間かかることもあります。orz
$ sudo apt-get upgrade ... The following packages will be upgraded: libasound2 libasound2-data ... 22 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 76.0 MB of archives. After this operation, 420 kB disk space will be freed. Do you want to continue? [Y/n]
Do you want to continue? [Y/n]でYを入力するかエンターキーを押すと更新が始まります。完了するまで待ちましょう。。。
完了したら、いったんsudo rebootで再起動しておきましょう。今回はここまでで終了です。お疲れ様でした!👏👏👏
最後に
これでRaspberry Piの初期設定は完了で、ようやくいろんなアプリなんかを作成したりできるようになりました🎊🎊
次の記事からはlsコマンドやvimコマンドの基本的な使い方の説明や、WEBページの作成やGPIOを利用した電子工作(Lチカなど)を進めていく予定です。