0
0

【日記】Ubuntu Severで自宅サーバを作る(2)

Posted at

フローチャート

1.VMware,Ubuntu Serverをダウンロード
2.VMwareでUbuntu Serverをインストール
 2.1. IPv4固定長の設定
3.Apacheをインストール
4.Apacheで自作Webサイトを表示
 4.1. 自作htmlをUbuntuに転送する
  4.1.1. UbuntuにOpenSSHをインストールする
  4.1.2. OpenSSHの各種設定をする
   4.1.2.1 ファイアウォールの設定
    4.1.2.1.1. ファイアウォールのインストール
    4.1.2.1.2. ポート番号の変更
   4.1.2.2 rootユーザのSSHログインの無効化   ←次ココ
   4.1.2.3 公開鍵認証方式の導入
  4.1.3. ホストからゲストへ自作htmlを転送する
 4.2. パスを接続する
 4.3. htmlが正常に動作するか確認する
 4.4. 同様にCSS,Javascriptを動かす方法を調べ転送する

htmlを配置する

 前回の続きからということでrootユーザのSSHログインの無効化を行う。最高権限を持つユーザをホストのみからのログインの限定することでセキュリティの向上を図る。SSH設定ファイルを開き、該当箇所を編集する。

sudo nano /etc/ssh/sshd_config
PermitRootLogin no
sudo systemctl restart ssh

別デバイスからも特定の操作ができるように後々ユーザやグループを追加する必要がありそうだ。

公開鍵認証方式の導入

 クライアント(macOS)からサーバ(Ubuntu Server)にSSH接続して操作を行うので、先ほどrootユーザのSSHログインを不可にしてしまったがために新しくユーザを作る必要がある。

sudo adduser username

登録者情報は一旦全て空欄で続ける。ユーザが新しくできたのでクライアント側から操作する。macのターミナルを開く。

ssh username@server_ip
ssh-keygen -t rsa -b 4096

-t rsa は鍵の暗号方式、-b 4096は鍵のビット長を定めるオプションである。
ここで誤ってmacOSでSSH接続した後に鍵を作成してしまったため、一度鍵を消してやり直す。

rm ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
  1. ターミナルで鍵を作成し、鍵を初めから終わりまでコピーする
ssh-keygen -t rsa -b 4096
cat ~/.ssh/id_rsa.pub

2. SSH接続して公開鍵を配置する

ssh username@server_ip
mkdir -p ~/.ssh
echo ssh-rsa "your_public_key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

3. Ubuntu Server側でSSH設定をする

sudo nano /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
sudo systemctl restart shh

4. クライアント(macOS)からSSH接続して確認する。
パスワード入力を求められなかったので成功していることが判明した。また、新規ユーザでSSH接続したのちsudoコマンドが実行できないことを確認し、管理者権限が正しく設定されていることを確認した。
スクリーンショット 2024-09-17 16.12.04.png

htmlを転送する

 自作したWebページはHTML,CSS,JavaScript,imgをまとめてあるのでフォルダごと転送しapacheのディレクトリに配置する。はじめに、ホストのターミナルを開きscpコマンドを用いてゲストへフォルダをコピーする。

scp -r /Users/foldername/Downloads/foldername ubuntu@192.168.10.2:/var/www/html

サーバ側でvar/www/htmlを確認するもフォルダが見つからないため検索する。

sudo find / -type d -name foldername 2>/dev/null

/ はルートディレクトリから順に検索する,
-type d は対象がディレクトリである,
2>/dev/null はエラー出力だけをゴミ箱に入れる=非表示にする
という意味である。出力がなかったので正しくコピーできていないということになる。今度は/var/www/htmlとは異なるディレクトリにコピーしてから移動させてみる。先ほどのscpコマンドのコピー先パスを変更して実行すると、フォルダーをコピーするログが流れた。次に、サーバ側でmvコマンドを用いフォルダーを移動させる。
スクリーンショット 2024-09-20 11.25.44.png
※一部塗りつぶしてある。
続いて元々あったサンプルhtmlファイルを削除する。

rm /var/www/html/index.html

このままだと、ブラウザで192.168.10.2/foldernameまで指定しないとwebページが開けないのでhtmlやcssをhtmlディレクトリ直下に移動する。

sudo mv /var/www/html/foldername/* /var/www/html
rm /var/www/html/foldername

ファイル構造が正しいことを確認し、ブラウザで出力を試みるも表示されなかった。そこでcatコマンドでhtmlを開いたところ、文字化けしていることがわかった。つまり、apacheのデフォルトの文字コードがUTF-8でない可能性がある。

sudo nano /etc/apache2/conf-available/charset.conf

しかし、文字コードはUTF-8になっていた。ここで、ファイルのアクセス制御を確認してないことに気がつき、ls -lで確認したところ700であった。htmlを表示できない原因の一つが判明した。直ちに変更を行う。

sudo chmod -R 644 /var/www/html
sudo chmod 755 /var/www/html

-R は再帰的に実行することを表し、指定したディレクトリ以下の全てを変更する。再びブラウザで開いても表示されなかった。catコマンドで表示するとスクロールができないため、lessコマンドで表示し、htmlのheadを確認したところ、文字化けはなかった。mainで文字化けしているところを調べると、全て日本語の部分が文字化けしていた。つまり、とりあえずhtmlが表示できない問題には文字コードは無関係であることが判明した。次の可能性としてUFWによりアクセスが制限されていることが考えられる。apacheは、HTTPは80番,HTTPSは443番が一般的であり、今回はHTTPなので80番を開放する。

sudo ufw allow 80

スクリーンショット 2024-09-20 15.02.35.png
出力に成功した。しかし、画像の表示に失敗している。ファイル構造は変わっていないはずである。imageディレクトリのパーミッションを確認すると、htmlやcssなどと同様に実行権限が付与されていなかった。つまり、ディレクトリを開けないのが原因である。権限を変更する。

sudo chmod 755 /var/www/html/images

リロードすると画像も出力することができた。著作権の都合でスクショは控える。

総評

全体のフローチャート

1.VMware,Ubuntu Serverをダウンロード
2.VMwareでUbuntu Serverをインストール
 2.1. IPv4固定長の設定
3.Apacheをインストール
4.Apacheで自作Webサイトを表示
 4.1. ホストの自作htmlをゲストにコピーする
  4.1.1. UbuntuにOpenSSHをインストールする
  4.1.2. OpenSSHの各種設定をする
   4.1.2.1 ファイアウォールの設定
    4.1.2.1.1. ファイアウォールのインストール
    4.1.2.1.2. ポート番号の変更
   4.1.2.2. rootユーザのSSHログインの無効化
   4.1.2.3. 公開鍵認証方式の導入
  4.1.3. htmlディレクトリの配置
  4.1.3.1. パーミッション,ufwの設定

特に手間取った作業

  • IPv4固定長の設定
    IPアドレス,サブネットマスクの知識を実際に使い、自宅ルータのDHCP割当設定を変更した。
  • ポート番号の変更 22/TCP → 2222/TCP
    変更する作業自体は困難でなかったが、変更後にSSH接続ができなくなるエラーが発生した。結局原因が不明で22/TCPを利用しているので、次のブログで調査する。
  • SSH接続
    公開鍵認証の知識を実際に使い、2つのOS間で公開鍵認証方式を確立した。
  • HTMLのコピー
    指定したディレクトリにコピーする際、エラーが発生した。これも原因不明で迂回策をとったため、次のブログで調査する。また、htmlなどに相対パスを用いているため、ファイル構造を意識した学習ができた。
  • HTMLの表示
    HTMLが表示されない理由を探るのに時間がかかった。ディレクトリ,ファイルのアクセス制御,UFWのポート制限が原因であった。原因を探る過程で文字コードやapacheの設定などを見直し、さらに知識の獲得ができた。

壁の乗り越え方

全ての工程が初めてだったということもあり、様々なエラーに直面した。しかし、その都度、ブログ(Qiita),サイト,Youtube,LLMなど様々な検索方法で解決した。コンピュータ,ネットワークなどは歴史が浅く、独学で学ぶには学ぶための手段が確立されていないというのが持論である。しかし、そのような特徴かつネットワークの分野だからこそ、先達者の知識がいたるところに転がっている。壁にぶつかったらまず調べる。それで分からなかったらほとんどの場合は調べ方が悪いのである。同じような壁にぶつかっている人には、ネットに答えは必ずあり、もし見つからないのであればそれは調べ方が悪いということを伝えたい。

感想

今まで知識として学習したことを実践を通して、体験,経験へ昇華させることで本当の意味で享受することができた。「調べる」という作業が最も困難であった。何をすればいいのか、その方法は、なぜうまくいかないのか、その解決策は何か、有効な質問の仕方でさえ分からないことが多々あった。そのような場合、LLMに頼ることがほとんどであったが、大体の回答は手段のみを示したものであって、プロンプトで指示しなければ「なぜ」を加えて説明するものはなかった。大規模な人工知能が主流の現在において、私たちが思いつくようなもので方法を調べられないというものはなくなりつつある。だからこそ、なぜそうなるのかを厳かにせず主体的に学習をしたい。

次の予定

まずはこのサーバ作成にあたり、未だ不明なエラーの解明を行い。それが終わったら、当初から考えていた本番である、Webサーバやファイルサーバ、メールサーバそのものの作成を試みる予定である。もちろん実現可能性は全く不明なので、再び調べることから始まる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0