⚙️

[課題振り返り] Born2beRoot

2025/01/22に公開

はじめに

先日42Tokyoのコモンコアを突破しました。今回は42の課題の1つであるBorn2beRootを振り返っていきたいと思います。

課題概要

Born2beRootは仮想マシンを作成しsshやufwなどの指示されたセットアップを行う課題です。

学んだこと

学んだことをまとめていきます。

仮想マシン(VM)とは

仮想マシンとは最も簡単にいうとすればマシンの中に作成するマシンのことです。
複数のシステム(OS)を同じ物理マシン上であたかも別々の物理マシン上のように実行できるようになります。
仮想マシンは実行しているマシンのハードウェアを使用するが、その内部(OSやアプリケーション)が全て異なります。

ハイパーバイザー

1台の物理マシン上で複数のマシンの実行を可能にするソフトウェアです。ハイパーバイザーが以下の役割を持つ仮想化レイヤーを導入することでそれを可能にしています。
・CPUやメモリ、ストレージなどのマシンのリソースを抽象化する。
->これによりVMが特定にハード(例えばアーキテクチャIntelやAMD、ARMなど)に依存せず、効率的なリソース利用(例えば単一の物理CPUコアを複数の仮想CPUコアとして利用)が可能になる。
・リソースを分割する。
->各マシン間に完全な隔離を保障する。
・その他セキュリティ機能やバックアップ機能など

DebianとRockyの違い

どちらもLinuxですがreviewでその違いを説明する必要があります。

Debian Rocky
開発者 広範な国際コミュニティの多くの人が関与 RESFという非営利法人
安定性 高い(保守的な更新) とても高い
パッケージ管理 apt, dpkg dnf, rpm
主な要素 デスクトップ、サーバーなど 商業用サーバーなど

aptとaptitude

どちらもDebianで使用されるパッケージ管理ツールですが、こちらについてもそれぞれ説明できる必要があります。
・apt
->'apt-get'や'apt-cache'などの複数のコマンドラインツールをまとめたもの。エンドユーザー向けに作られていて出力が簡潔で読みやすい。
・aptitude
->'apt-get'の機能を全て含むさらに高度なもの。コマンドラインのみでなくキーボード入力対応の半グラフィカルなインターフェース(GUI)も提供する。

apt aptitude
インターフェース CLI GUI
依存関係の問題解決 簡単な方法を提案する 複数の解決方法を選択できるオプションを提供する
履歴とログ パッケージのインストールやアップデート履歴を保存 ユーザー操作履歴やパッケージの依存関係に関する情報などaptより詳細な履歴を保存

sudo

sudo(SuperUser DO)はUnix系OSで使用されるもので、ユーザーがスーパーユーザー(root権限を持ったユーザー)または他のユーザーとしてコマンドを実行できるようにするコマンドです。
man sudoで以下のようにマニュアルを確認できます。(以下はMacOSです)

SUDO(8)                          System Manager's Manual                         SUDO(8)

NAME
       sudo, sudoedit - execute a command as another user

SYNOPSIS
       sudo -h | -K | -k | -V
       sudo -v [-ABkNnS] [-g group] [-h host] [-p prompt] [-u user]
       sudo -l [-ABkNnS] [-g group] [-h host] [-p prompt] [-U user] [-u user]
            [command [arg ...]]
       sudo [-ABbEHnPS] [-C num] [-D directory] [-g group] [-h host] [-p prompt]
            [-R directory] [-T timeout] [-u user] [VAR=value] [-i | -s]
            [command [arg ...]]
       sudoedit [-ABkNnS] [-C num] [-D directory] [-g group] [-h host] [-p prompt]
                [-R directory] [-T timeout] [-u user] file ...

DESCRIPTION
       sudo allows a permitted user to execute a command as the superuser or another
            [-R directory] [-T timeout] [-u user] [VAR=value] [-i | -s]
            [command [arg ...]]
       sudoedit [-ABkNnS] [-C num] [-D directory] [-g group] [-h host] [-p prompt]
                [-R directory] [-T timeout] [-u user] file ...

DESCRIPTION
       sudo allows a permitted user to execute a command as the superuser or another
       user, as specified by the security policy.  The invoking user's real (not
       effective) user-ID is used to determine the user name with which to query the
       security policy.

       sudo supports a plugin architecture for security policies, auditing, and
       input/output logging.  Third parties can develop and distribute their own plugins
       to work seamlessly with the sudo front-end.  The default security policy is
       sudoers, which is configured via the file /private/etc/sudoers, or via LDAP.  See
       the Plugins section for more information.

       The security policy determines what privileges, if any, a user has to run sudo.
       The policy may require that users authenticate themselves with a password or
       another authentication mechanism.  If authentication is required, sudo will exit
       if the user's password is not entered within a configurable time limit.  This
       limit is policy-specific; the default password prompt timeout for the sudoers
       security policy is 0 minutes.

(抜粋)

ssh

この課題ではsshをインストールしてポート4242を開ける必要があります。
ssh(Secure Shell)とは、ネットワークを介して他のコンピュータと安全に通信を行うためのプロトコルおよびその実装のこと。
sshはユーザー認証方法として以下の2通りの方法を提供します。
・パスワード認証: ユーザー名とパスワードを使用して認証
・公開鍵認証: 事前に公開鍵と秘密鍵をペアで作成し認証側が公開鍵を持ち、ユーザーが対応する秘密鍵を持っているかどうかで認証

ufw

この課題ではufwを用いてポート4242でのネットワークトラフィックを許可する必要があります。
ufw(Uncomplicated Firewall)とは、Linuxにおけるファイアウォール管理を簡単にするためのツールです。

ファイアウォール

ファイアウォールはネットワークのセキュリティを強化するための仕組みです。具体的に以下の役割を持ちます。
・トラフィックを許可するか拒否するかを決定する
->特定のIPアドレスやポートからの通信を許可したり拒否できる
・不正アクセスの防止
->外部からのリモートデスクトップアクセスを制限する
・トラフィックのログを記録し監視する
->特定のIPアドレスからの多数接続を攻撃として認識

crontab

Linuxでタスクをスケジュールして自動実行するための仕組みを提供するツールです。
特定の日時に実行したり周期的に実行したりできます。

$ crontab -e //crontabを編集
$ crontab -l //crontabを表示
$ crontab -r //crontabを削除

データのハッシュ値

この課題では提出ファイルに、作成した仮想マシンのVDIファイル(OSやアプリケーションのデータを格納する仮想ハードディスク)のハッシュ値を含める必要があります。
ハッシュ値はshasum example.txtで生成されます。
ハッシュ値はSHA(Secure Hash Algorithm)を使用してそのデータに対して計算される値です。同じデータにはもちろん同じ値が結果として出ます。異なるデータが同じハッシュ値になる(ハッシュの衝突という)可能性は極めて低くなるように計算されています。
そのため、課題提出直前のハッシュ値とreview直前のハッシュ値が同じであることを確認することで提出してからデータの改竄がないことを確認できます。

Discussion