2024/05 CTOへの日報まとめ

日報




2024-5-1

apkコマンドについて理解することができました。

  • apkコマンドとは、Alpine Linuxのためのパッケージ管理システムが提供するコマンド
  • このコマンドやパッケージ管理システムを使って、ソフトウェアのインストール、アップグレード、削除などのパッケージ管理作業を行うことができる
  • Alpine Linuxは軽量でセキュリティに焦点を当てたLinuxディストリビューションであり、特にDockerコンテナのベースイメージとして広く使用されている
2024-5-2

Dockerfile内に記述するWORKDIR命令について知見を深めることができました。

WORKDIR命令は、Dockerfile内の後続の命令が実行されるコンテナ内のデフォルトの作業ディレクトリを設定する。WORKDIR命令の後続に下記の命令がある場合、以下のように動作する。

COPYとADD

  • この命令がファイルやディレクトリをコンテナにコピーする際、WORKDIRで設定されたパスが基準となる
  • 例えば、WORKDIR /appと設定されている場合、COPY . .はホストの現在のディレクトリからコンテナの/appディレクトリにファイルをコピーする

RUN

  • RUN命令で指定されたコマンドは、WORKDIRで指定されたディレクトリ内で実行される。このディレクトリがカレントディレクトリとして機能する

CMDとENTRYPOINT

  • コンテナが起動するときに実行されるデフォルトコマンドまたはエントリポイントも、WORKDIRが設定されたディレクトリ内で実行される

WORKDIRを設定することで、Dockerfile内のパスを絶対パスではなく相対パスで指定できるようになり、Dockerfileの可読性とメンテナンス性が向上する。また、複数のWORKDIR命令をDockerfile内に記述することで、作業ディレクトリを途中で変更することも可能。それぞれのWORKDIRが指定された後は、そのディレクトリが新しい作業ディレクトリとして機能する。

2024-5-8

ファイルを削除するPHP関数であるunlinkについて知ることができました。また、その他ファイル操作で使用可能なPHP関数についても知ることができました。
https://www.sejuku.net/blog/24309

2024-5-10

Dockerfileに記述されたUSER命令について理解することができました。

  • USER命令は、Dockerfile内で使用され、USER命令以降に記述されたRUN、CMD、ENTRYPOINTといった命令を実行するユーザーのアイデンティティ(ユーザー名やユーザーID)を指定するために使われる
  • この設定は、セキュリティのために重要
  • 通常、Dockerコンテナはデフォルトでrootユーザーとして実行されるが、これによりセキュリティリスクが高まる可能性がある
  • USER命令を使うことで、コンテナがrootユーザーではなく、指定した非特権ユーザーで実行されるように設定できる
  • これにより、コンテナ内で実行されるアプリケーションが持つ権限を制限し、セキュリティを向上させることができる
  • USER命令より前に記述されたRUN、CMD、ENTRYPOINTなどの命令は、USER命令の影響を受けずに実行される
  • つまり、デフォルトのrootユーザー(またはそれ以前に設定されていたユーザー)として実行される
2024-5-13

Dockerはネットワークの振る舞いを定義することが可能。そこで、Dockerにデフォルトで存在する2種類のNetwork Driver について知ることができました。

1、bridge
Dockerを使用する際は基本的にこのNetwork Driverが使用される。Linuxカーネルのbridgeネットワークを使用するための機能である。何も指定せずDocker Container を起動すると docker0 という名前のbridgeネットワークに所属する。

2、host
ホストマシンのeth0を直接使用する方法

(3、none)
どのDriverも使用せず、起動したコンテナをネットワークに所属させないための設定

2024-5-14

DBのカラムの型の1つであるBLOBについて知ることができました。

  • BLOB(Binary Large Object)とは、データベース管理システム(DBMS)で使用されるデータ型の一つ
  • 画像、ビデオ、音声、ファイルなどの大量のバイナリデータを格納するために設計されている

BLOBの特徴

1. バイナリデータの格納

  • BLOBは、任意のバイナリデータを格納することが可能
  • これには、画像、音声、ビデオファイル、実行ファイルなどが含まれる

2. サイズの大きさ

  • BLOBは非常に大きなデータを格納できるよう設計されている
  • 多くのデータベースシステムでは、数メガバイトから数ギガバイトのデータを格納できる

3. 異なるサイズの種類

  • 一部のデータベースシステムでは、BLOBデータ型に異なるサイズの種類がある
  • 例えば、MySQLでは、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOBなどがある
  • それぞれの型は格納できるデータの最大サイズが異なる
2024-5-15

16進数の文字列をバイナリデータに変換するPHP関数hex2binについて知ることができました

2024-5-17

電話番号のように、先頭が0から始まる数字データをファイルに出力した際に、先頭の0が消えてしまう問題に対する対応策の1つを知ることができました。

sprintf関数を使い、データを明示的に文字列としてフォーマットする
$val = sprintf(‘=”%s”‘, “0123456789”);

=は、csvにセルの内容を計算式として解釈させるためのシンボルだが、”で囲まれているため、計算式としては解釈されず、文字列として扱われる。文字列として扱われることにより、先頭の0が消えない。

2024-5-20

docker commit という「指定されたコンテナの現在の状態を新しいイメージとして保存する」コマンドについて知ることができました。

docker commit コマンドの利用の流れ
1. コンテナの状態を保存:docker commit コマンドを実行すると、指定したコンテナのファイルシステムの状態や設定が保存される。これにはコンテナ内で行われた全ての変更(ファイルの追加、削除、設定の変更など)が含まれる。

2. 新しいイメージの作成:保存されたコンテナの状態を基に、新しいDockerイメージを作成

3. 複製可能:新しく作成されたイメージを使用して、新しいコンテナを起動すると、docker commit コマンドを実行した時点の状態を持つコンテナが生成される

2024-5-21 ①

docker diff という、コンテナ起動後にどのファイルが変更されたか確認することができるコマンドについて知ることができました。dockerfile記述時のデバッグによく使用するとのことでした。

例)

$ docker run --name hoge ubuntu touch /tmp/hoge.txt
$ docker container diff hoge
C /tmp
A /tmp/hoge.txt

2024-5-21 ②

WAFは通過しているものの、アクセスログが見当たらない場合、その間にあるALBを疑うというアプローチを知ることができ、非常に勉強になりました。今後も同じような場面に遭遇しましたら、ご教示いただいたAthenaの使い方によりALBのログを確認したいと思います

2024-5-22

エクストリームプログラミングについて知ることができました。

エクストリームプログラミング(XP)とは、アジャイル開発の一つの手法のこと

XPの主な特徴とプラクティス

1. ペアプログラミング:2人1組でコーディングを行い、互いにコードレビューを実施する。これにより、バグの早期発見や知識の共有が促進される

2. テスト駆動開発(TDD):コーディングを始める前にテストコードを書き、それに合格するコードを開発する。これにより、品質の高いコードが保証される

3. リファクタリング:リファクタリングを行う

4. 継続的インテグレーション(CI):コードの変更があるたびに自動でビルドとテストを行い、早期に問題を発見する

5. 短いリリースサイクル:頻繁に小さなリリースを行い、フィードバックを早期に得て、それを反映させることで、顧客のニーズに迅速に対応する

6. お客様との密接な協力:顧客と綿密にコミュニケーションを取り、優先順位を決定し、開発プロセスにおけるフィードバックを即座に反映させる

7. コレクティブオーナーシップ:全員がコードベース全体に責任を持ち、誰でも自由にコードを改善できる環境を作る

8. 持続可能なペース:開発チームが長期間にわたって高い生産性を維持できるよう、過度な残業を避け、バランスの取れた作業を奨励する

XPは、開発プロセス全体を通じて継続的なフィードバックと改善を重視している手法で、開発チームが効率的かつ効果的に高品質なソフトウェアを提供できるようサポートする。

アジャイル開発という開発手法の中にも、XPのような更に細かい手法があることを知ることができました。

2024-5-23

IPアドレスに関して、ホスト部が255のIPは、サブネットに対するブロードキャストを示すことを知りました(例、10.11.12.255/24)

2024-5-24

サブネットに対するブロードキャストの用途について知ることができました。

  • ARP(アドレス解決プロトコル):IPアドレスからMACアドレスを取得する際に使用される
  • DHCP:IPアドレスの自動割り当てのために使用される
  • ネットワーク管理:ネットワーク内のすべてのデバイスに対する通知や情報の配信に使用される

ブロードキャストは有用だが、ネットワークトラフィックが増加するため、大規模なネットワークでは慎重に使用する必要がある。

2024-5-27

docker-compose使用時における4つの環境変数定義方法を知ることができました。ただ、セキュリティ等を考慮すると、特別な理由がない限りは、.envを使用した4番目の方法を選択するのが望ましいと思いました。

1、docker-composeに起動時に渡す

$ docker-compose up -e MYSQL_PASSWORD=mypassword

2、docker-compose.yamlへ記述

version: '3.7'
services:
app:
build: .
environment:
- MYSQL_PASSWORD=mypassword

3、シェルの環境変数から読み込み

version: '3.7'
services:
app:
build: .
environment:
- MYSQL_PASSWORD=${MYSQL_PASSWORD}

$ export MYSQL_PASSWORD=mypassword
$ docker-compose up

4、ファイルから読み込む

version: '3.7'
services:
app:
build: .
env_file:
- .env

(.env)
MYSQL_PASSWORD=mypassword

2024-5-28

dockerにおいて、ホストとコンテナ間のファイル共有速度を改善する3つのオプションについて知ることができました。

参考記事:https://seeder.site/app/500.html

① consistent

  • ホスト側とコンテナ側で常に同期を取り、完全な一貫性を実現
  • パフォーマンス:低
  • 利用シナリオ:ホストとコンテナの間で常に最新のデータが必要で、一貫性が最も重要な場合

具体例
データベース開発

  • ローカルのデータベースファイルをコンテナ内のデータベースと同期する必要がある場合
  • 例:SQLiteデータベースをローカルで編集しながら、コンテナ内のアプリケーションからも同じデータを参照する場合

リアルタイム共同編集ツール

  • コードエディタやドキュメントエディタのように、複数のユーザーがリアルタイムでファイルを編集する場合

② cached

  • ホスト上の更新がコンテナ上に反映されるまで、遅延が発生するのを許容する
  • 常にホストの表示が信頼できる
  • パフォーマンス:中
  • 利用シナリオ:コンテナがホストから大量のデータを読み取るが、ホスト側のデータ更新が頻繁ではない場合

具体例
ウェブサーバー

  • コンテナ内でウェブサーバーを実行し、静的なウェブサイトをホストから提供する場合
  • ホスト側のファイルが頻繁に更新されないのであれば、cachedを利用することは有用であり、コンテナからの読み取りが高速になる

CDNキャッシュ

  • コンテナがホストから大量の静的ファイル(画像、動画、CSS、JavaScriptなど)を提供される場合
  • これらのファイルが頻繁に更新されないのであれば、cachedを利用するのが有用

③ delegated

  • コンテナ上の更新がホスト上に反映されるまで、遅延が発生するのを許容する
  • 常にコンテナの表示が信頼できる
  • パフォーマンス:高
  • 利用シナリオ:コンテナがホストに対して大量のデータを書き込むが、ホスト側のデータの即時更新がそれほど重要でない場合

具体例
ログファイルの書き込み

  • コンテナで動くアプリケーションが大量のログファイルを書き込む場合
  • コンテナ内のログがホスト側に即時反映される必要がない場合に有効

データバッファリング

  • 一時的なデータをコンテナ内で書き込み、それを後でホストに同期する場合
  • 例:一時ファイルへの書き込み
2024-5-29

今更かもですが、、シンボリックリンクがどこを参照しているか確認するコマンドについて、知ることができました

ls -l /path/to/symlink
> lrwxrwxrwx 1 user user 20 Jan 1 12:00 /path/to/symlink -> /path/to/original

2024-5-30

OSに組み込まれているネットワーク機能をアプリケーションから呼び出す際に利用される様々なライブラリの開発時に元となった(参考にされた)Socketライブラリについて知ることができました。

  • Socketライブラリとは、カリフォルニア大学バークレー校で作られたBSD(Berkeley Software Distribution)というUNIX OSの派生バージョンで開発されたC言語用のライブラリ
  • インターネットで使われている機能の多くが、Socketライブラリを用いて開発された
  • そのため、BSD以外のOSやC言語以外の言語でもSocketライブラリをお手本にしてネットワーク用のライブラリが作られた
  • そのため、ネットワーク用の標準的なライブラリとして位置づけられている
2024-5-31

スプーフィング攻撃(spoofing attack)について知ることができました。

  • スプーフィング攻撃とは、偽装や詐称を用いてシステムやユーザーを欺く,騙すサイバー攻撃の一種

スプーフィング攻撃の主な種類

IPスプーフィング

  • 攻撃者が自分のIPアドレスを偽装して、信頼できるIPアドレスからの通信であるかのように見せかける
  • これにより、攻撃者はターゲットシステムにアクセスしたり、サービスを妨害することができる

DNSスプーフィング(DNSキャッシュポイズニング)

  • DNSリクエストの応答を偽装し、ユーザーを悪意のあるサイトに誘導する
  • 例えば、正当な銀行のサイトの代わりにフィッシングサイトに誘導されることがある

Emailスプーフィング

  • メール送信者のアドレスを偽装し、信頼できる人物や組織からのメールであるように見せかける
  • これにより、フィッシングやマルウェアの配布が行われる

Webサイトスプーフィング

  • 正当なウェブサイトに似せた偽のウェブサイトを作成し、ユーザーを騙して個人情報を入力させる手法

ARPスプーフィング

  • ローカルネットワーク内での攻撃で、攻撃者が偽のARPメッセージ(=偽のMACアドレス)を送信し、通信を自分のデバイスに接続させる
  • これにより、ネットワーク上の通信を盗聴したり、改ざんしたりする