Ubuntu ServerをWebサーバー化 ― Apache導入とLinux権限の基礎

今日は、Ubuntu Server上にApache HTTP Serverを導入し、自宅サーバーをWebサーバーとして動かすところまで進めた。

まずApacheをインストールし、systemctl status apache2 でサービスが正常に起動していることを確認した。

次に、ss -tlnp を使って、ApacheがTCPの80番ポートで待ち受けていることを確認した。 -t はTCP、-l はLISTEN状態、-n は数値表示、-p は使用しているプロセスの表示を意味する。

別のPCのブラウザからUbuntu ServerのローカルIPアドレスへアクセスしたところ、最初は接続できなかった。 UFWでHTTP通信が許可されていなかったため、sudo ufw allow 80/tcp を実行して80番ポートへの通信を許可した。 その後、Ubuntu ServerのローカルIPアドレスへHTTPでアクセスし、UbuntuのApache2 Default Pageが表示されることを確認した。

Apacheで重要な場所も確認した。

/etc/apache2/ Apache HTTP Serverの設定ファイルが置かれるディレクトリ。

/var/www/html/ Webページとして公開するファイルを置くDocument Root。

/var/log/apache2/ Apacheのアクセスログやエラーログが保存されるディレクトリ。

ls -l /var/www/html/ を実行し、標準のWebページとして使われていたindex.htmlを確認した。 head -n 20 /var/www/html/index.html では、HTMLファイルの先頭20行を表示して内容を確認した。

既存のApache標準ページを残すため、sudo cp /var/www/html/index.html /var/www/html/index.html.bak を実行してバックアップを作成した。

その後、sudo truncate -s 0 /var/www/html/index.html を使い、index.htmlというファイル自体は残したまま内容だけを空にした。 truncateはファイルサイズを変更するコマンドで、-s 0 はサイズを0バイトにする指定。

次に、echo '<h1>Hack My Ubuntu Server</h1>' | sudo tee /var/www/html/index.html を実行し、新しいHTMLを書き込んだ。

ここでは、echoで文字列を出力し、|(パイプ)でその出力をteeへ渡し、teeがindex.htmlへ書き込む流れを確認した。

ブラウザを更新すると、「Hack My Ubuntu Server」という自分で書き換えたページが表示された。

Webページが表示される流れは、 クライアントPCのブラウザ → HTTP → Ubuntu ServerのローカルIPアドレス → TCP 80番ポート → Apache HTTP Server → /var/www/html/index.html → HTTPレスポンス → ブラウザ表示 という形になる。

続いて、ls -ld /var/www/html/ を実行し、Document RootそのもののLinuxパーミッションを確認した。

結果は、 drwxr-xr-x 2 root root ... /var/www/html/ だった。

先頭のdはディレクトリを意味し、その後の権限は、 rwx | r-x | r-x 所有者 | グループ | その他 に分かれる。

/var/www/html/ の所有者とグループはrootだった。 現在SSHでログインしているユーザーはrootではなく一般ユーザーで、必要な操作のみsudoを付けてroot権限で実行している。

Ubuntuでは、普段からrootで作業するのではなく、一般ユーザーで作業し、システム変更など管理者権限が必要なときだけsudoを使う運用が基本であることも確認した。

また、ディレクトリに対するx権限は、通常ファイルの「実行」とは意味が異なり、そのディレクトリを辿ったり、中のファイルへアクセスしたりするための権限であることを確認した。

途中でSSHが一時的に固まる現象も発生したが、その後自然に復旧した。

復旧後、自宅ルーターのローカルIPアドレスに対してpingを10回実行し、Ubuntu Serverからルーターまでの通信を確認した。 結果は10回送信、10回受信、0% packet lossで、確認時点ではWi-Fi通信は正常だった。

さらに、Tailscale経由でクライアントPCへの通信確認も行った。 pongが返り、ローカルネットワーク上で直接通信できていることを確認した。

今日は、Ubuntu ServerにApacheを導入してWebページを公開し、HTTP、80番ポート、Document Root、UFW、HTMLファイル、Linuxパーミッション、一般ユーザーとroot、sudoの関係まで確認した。

一覧へ戻る