Help us understand the problem. What is going on with this article?

Raspberry Pi 4にUbuntu Serverを入れて初期設定をするまで【簡単なセキュリティを添えて】

この記事の内容は間違っている、正確でない、効率的ではないなどの可能性が大いにあります。コマンド等は理解してから実行をする事を推奨します。

Ubuntuのimageをダウンロード

Ubuntu.png

Install Ubuntu Server on a Raspberry Pi 2, 3 or 4から適当なイメージをダウンロードする。
Raspbianは32bitしかないけどUbunutuは64bitイメージがある。
Ubuntu 18.04.4 LTS 64bitが個人的にはオススメ。

書き込む

image.png

microSDに書き込む。MacならbalenaEtcherみたいなアプリで入れるとフォーマットもやってくれるので楽。balenaEtcherならimageにダウンロードした.imgを指定して、targetにmicroSDを指定する。
USB3.0に対応したリーダーで書き込むと良い。このあとの設定でミスって再書き込みとかは良くあるので本当に初心者なら絶対に買っとくと良い。1000円もあれば安いの買えるので。

先にwifi設定する

SDカードの名前がsystem-bootになっているので(なってないならそれっぽいのを探す)、それをマウントして「network-config」を書き換える。
注: balenaEtcheで書き込むと自動的にアンマウントされるので、ディスクユーティリティを使うなり刺し直すなりして再度マウントする必要がある。

これを

# 省略
version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
# 省略

こうじゃ(複数のwifiを使えるなら同時に書き込んでおくと良い。無いならSSID2以下は削除)

# https://netplan.io/reference
version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: true
    optional: true
    access-points:
      "SSID1":
        password: "PSSWORD1"
      "SSID2":
        password: "PSSWORD2"

これでwifi接続の時プライベートIPを固定するならばこう

# https://netplan.io/reference
version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: false
    dhcp6: false
    optional: true
    addresses: [192.168.1.XX/24] #設定するIP
    gateway4: 192.168.1.1 #ルーターのIP---1
    nameservers:
      addresses: [192.168.1.1] #1と同じ
      search: []
    access-points:
      "SSID1":
        password: "PASSWORD1"
      "SSID2":
        password: "PASSWORD2"

これでアンマウント。ラズパイに差し込んで起動。

Memo: この設定を今後変更したい場合はラズパイ側の/etc/netplan/50-cloud-init.yamlで変更できる。

最初のログイン

モニターとキーボードにつないでまずはログイン。
ID: ubuntu
PW: ubuntu
でログイン。
一旦rebootして、再度ログイン。こうするとログイン後の説明に「プライベートIPが192.168.1.XXだよ〜」と表示される。(IP address for wlan0: 192.168.1.XXと出ればOK。もしかしたら環境によって出ないかも)

適当な別のPCでssh ubuntu@192.168.1.XXでログイン。

Memo: cloud-initの設定をもう少しやればヘッドレスで完結できる気がする
Memo: 適当な段階でsudo apt updateとsudo apt upgradeをやっとくと良い

キーボードの設定

現在ラズパイで直接キーボードを使う時、英字キーボード配列が参照されているため、日本語キーボードを参照するように変更していく。

sudo dpkg-reconfigure keyboard-configuration

私はGeneric 105-key PC(intl.)のJapanese選択、その後はエンター連打でよかったが、使用しているキーボードに合わせて設定しとく。急にssh接続ができなくなった時にキーボードが十分叩ける状態じゃないと大変なのでやっておくこと。

SSHの設定

sudo vi /etc/ssh/sshd_config

/etc/ssh/sshd_configの中の1行を書き換える。

#Port 22 #これを
Port 53008 #これに(値は49152–65535の範囲で任意に設定できる)

これでSSHのポート番号が変更された。
今後SSH接続するときは

ssh USERNAME@192.168.1.XX -p 53008

で入れる。

Memo: 外部ネットワークに公開しないなら変更しなくても良い気がする。

ユーザーの追加とロック

sudo adduser USERNAME
sudo adduser USERNAME sudo

ユーザーの作成をし、ユーザーをsudoグループに追加。

sudo passwd -d ubuntu
sudo passwd -l ubuntu
sudo passwd -l root

でubuntuとrootをロック。exitでubuntuから抜ける。

注: この段階でログインが可能なユーザーは新規に作成したユーザーのみとなります。

Memo: ロックしてもsudo suで入ることはできる。しかし、少なくとも一度sudoグループに入っているユーザー、あるいは管理者権限をもったユーザーにログインできないとそのユーザーは使えない。
Memo: 何もしてなければrootのパスワードは設定されておらず、そもそもログインできない。(確認はsudo cat /etc/shadowrootを読めばできる。)同様にpasswd -dでubuntuのパスワードも削除している。なので実はsudo passwd -lの2行は必要ない。

VSCode Remote Development

いちいち -p 53008をつけて接続するのは面倒なので.ssh/configに設定をする。
ついでにVSCodeで接続できるようにもする。

ローカル側で${HOME}/.ssh/configを作成し編集

vi ${HOME}/.ssh/config
Host 任意の名前
  HostName 192.168.1.XX
  User ログインするユーザー名
  Port 53008

VSCodeのRemote Developmentを入れて、
RemoteDeveloment.png

左のアクティビティバーに追加されたリモートエクスプローラーをクリックし、SSH Targetsに先程作成したcofigが反映されている事を確認する。
反映されていないならばリモートエクスプローラーのSSH TARGETSのところにある歯車から \${HOME}/.ssh/config (Macなら${HOME}は/Users/USERNAME)があるか確認し、VSCodeを再起動する。
設定したHOST名をクリックするとパスワードの入力を求められるので、ログインするユーザーと合致するパスワードを入力する。
これでVSCodeでRaspberry Piの開発が可能となる。

公開鍵認証(オプション)

認証をパスワードから公開鍵に移行する事で便利、あるいは(設定次第ではあるが)よりセキュアになる。
ざっくりとした手順だが、

  1. ローカル側でid_rsa,id_rsa.pubをssh-keygen -t rsaで作成。
  2. id_rsa.pubの内容をRaspberry Piの${HOME}/.ssh/authorized_keysに追加

でできる。詳しくは調べると出てくる。authorized_keysはパーテーションを600にすること。
パスワードでのSSH接続を拒否することもできる。
/etc/ssh/sshd_configのPasswordAuthenticationをnoにするとよい。
注: PubkeyAuthentication no(公開鍵認証を拒否)の環境でPasswordAuthenticationまで拒否しないこと

ファイアーウォール

ubuntuでは標準でポートが全て閉じられており、公開しないならファイアーウォールの設定をしなくても良いという話もある。

試しにnmapでポートスキャンしてみる。
結果は80/110/143がTCPで開いてる。22番は閉じてるので、あまり弄らなくてもいいかなとは思うが、今後の事も考えて設定するのに慣れておくためにも設定しておく。

sudo ufw allow XXX/tcp

でポート番号やプロトコルのルールを設定。

sudo ufw enable
sudo ufw logging on
sudo ufw reload
sudo ufw status verbose

など。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした