オペレーティングシステム(OS) は、ユーザー/アプリケーションとハードウェアの間に位置するソフトウェア層です。CPU 時間の割り当て、メモリとファイルの管理、デバイスの制御を行い、システムコール とシェル/GUI を通じて一貫したインターフェースを提供し、プログラムが効率的かつ安全に動作できるようにします。
- プロセス/CPU 管理: プロセスの生成・終了、スレッドのスケジューリング。
- メモリ管理: RAM の割り当て、仮想記憶 の実装、分離の強制。
- デバイス/I/O 管理: ドライバーを介したディスク・NIC・キーボード等の抽象化。
- ファイルシステム管理: 権限付きでファイル/ディレクトリにデータを編成。
- セキュリティとアカウンティング: 認証、認可、ログ、クォータ。
- ユーザー/プログラムのインターフェース: シェル/GUI とシステムコール API。
- カーネル(Kernel): カーネルモードで動く特権コア。スケジューリング、メモリ、ドライバー、ファイルシステム、IPC を担当。
- シェル(Shell): ユーザー向けの CLI/GUI。コマンドを解釈しプログラムを起動。
- システムコール(syscall): ユーザーモードからカーネルサービスへの管理された入口(例:
open, read, execve, CreateProcessW)。
カーネルの代表的スタイル:
- モノリシック(例:Linux)— 多くのサービスがカーネル内。
- マイクロカーネル — サービスをユーザーモードへ移しモジュール化。
- ハイブリッド(例:Windows, XNU)— 両者の折衷。
- プロセス: 実行中のプログラム。独自の仮想アドレス空間を持つ。
- スレッド: プロセス内のスケジューリング単位。メモリを共有。
- スケジューラ: 次に実行するものを決定(FCFS, SJF, 優先度, ラウンドロビン, MLFQ)。プリエンプション有無、コンテキストスイッチ、スターベーションの理解は性能・フォレンジックに不可欠。
- 仮想記憶: 各プロセスに分離された論理アドレス空間を与える仕組み。RAM とディスク(ページング)で裏付け。
- ページ置換アルゴリズム: FIFO, LRU, Optimal など。局所性とオーバーヘッドのバランスを取る。
- 保護機構:(ユーザー/カーネルモード、ページ権限)プロセス間干渉を防止。
- OS は ファイルシステム(Linux の ext4/XFS、Windows の NTFS/ReFS 等)を提供。メタデータ、権限/ACL、ジャーナリングで堅牢性を向上。
- ブロック I/O(ディスク/SSD)はスケジューラを使用。キャラクタ I/O(端末)はストリーム指向。
- ディスクスケジューリング(SCAN/LOOK など)とバッファ/キャッシュでスループットを改善。
一般的な流れ:
- UEFI/BIOS がハードウェア初期化とブートローダ探索を実施。
- ブートローダ がカーネル(+initramfs)をメモリへ展開。
- カーネルがサブシステムを初期化し、ルート FS をマウント、最初のユーザープロセス(
init/systemd または Windows Session Manager)を起動。
- 各種サービスとログイン/セッションマネージャが起動。
ユーザーの操作は ユーザーモード、OS の中枢は カーネルモード で動作。
共通プリミティブ:
- ID とグループ、権限(rwx・ACL)、所有権、最小権限の境界。
- ポリシー適用(Windows:UAC/グループポリシー、Linux:DAC+MAC[SELinux/AppArmor])。
- 監査とログ(Windows イベントログ、Linux の syslog/journald)。
良い衛生:最小権限、定期パッチ、強力な認証。
- 仮想マシン(VM): 完全なハードウェアを仮想化し、1 台のホストで複数 OS を実行。
- コンテナ:(Linux の namespaces/cgroups)共有カーネル上でプロセスを分離 — 起動が速く高密度。プロダクション&ラボに最適。
- デスクトップ: Windows, macOS, Linux ディストリビューション — 生産性、開発、ゲーム。
- サーバー: Linux/Windows Server — ヘッドレスサービス、性能・セキュリティ調整。
- モバイル: Android/iOS — アプリのサンドボックス化、モバイルセキュリティ。
- Linux:
useradd, groupadd, passwd -l、/etc/passwd と /etc/shadow。
- Windows:
net user, net localgroup、MMC の Local Users & Groups。
- Linux:
apt, dnf, yum, apk。
- Windows: Winget/Chocolatey、Windows Update(
wuauserv)。
- Linux:
systemctl enable|start <service>(systemd)または service(SysV)。
- Windows: サービスコントロールマネージャ(
sc config/start/stop)、Services.msc。
- Linux:
chmod, chown, umask;ext4/XFS。
- Windows: NTFS ACL(GUI または
icacls)、継承、監査。
- Linux:
/var/log/*, journalctl;logrotate でローテーション/圧縮。
- Windows: イベントビューア → Application/Security/System;グループポリシーやコンソールで保持ポリシー設定。
- Linux:
journalctl -u <svc>, dmesg, top/htop, ss -tulpn, lsof, strace。
- Windows: イベントビューアのフィルタ、Resource Monitor、Process Explorer、
Get-WinEvent, Get-Process, netstat、Sysinternals。
- ログのローテーション、集中管理(syslog → SIEM)、保持・アクセス方針の策定。logrotate は Linux 標準の自動ローテーションツール。
Linux
- root の SSH ログイン無効化(
PermitRootLogin no)、鍵認証を推奨。
- 定期パッチ、最小パッケージ、ファイアウォール(
ufw/nftables)。
- 機微ファイルの適切な権限(例:
/etc/shadow は 640、所有 root:shadow)。
- logrotate と集中ログの設定、認証失敗の監視。
Windows
- RDP に NLA を適用、Guest 無効化、強力なロックアウトポリシー。
- Windows Update を有効維持、Defender と SmartScreen をオン。
- ローカル管理者の利用を制限、最小権限、AppLocker/WDAC を活用。
- ログ保持を定義し、SIEM へ転送。
- OS とは? ユーザー/アプリとハードウェアの間のインターフェース。資源を管理しサービスを提供。
- プロセス vs スレッド? プロセスは独自アドレス空間、スレッドはそれを共有する実行単位。
- 仮想記憶とは? ページングと二次記憶で、プロセスに分離されたアドレス空間を与える抽象化。
- カーネル vs シェル? カーネル=特権コア、シェル=CLI/GUI。システムコールで両者が接続。
- モノリシック vs マイクロ? モノリシックは大半のサービスをカーネル内、マイクロは最小限のコアでサービスをユーザーモードへ。
使い捨ての VM/コンテナで実行してください。
Linux
# 1) ユーザー&グループ
sudo groupadd secops && sudo useradd -m -g secops -s /usr/sbin/nologin secops && sudo passwd -l secops
# 2) パッケージ(Debian/Ubuntu)
sudo apt-get update -y && sudo apt-get install -y htop && htop --version && sudo apt-get remove -y htop
# 3) サービス(systemd)
sudo systemctl enable --now cron || echo "Not available here"
# 4) ログローテーション
cat | sudo tee /etc/logrotate.d/custom <<'EOF'
/var/log/custom.log {
weekly
rotate 4
compress
missingok
notifempty
create 0640 root adm
}
EOF
sudo touch /var/log/custom.log && sudo chown root:adm /var/log/custom.log && sudo chmod 0640 /var/log/custom.log
# 5) SSH ハードニング
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config && sudo systemctl restart ssh || true
Windows(管理者で PowerShell 実行)
# 1) ユーザー&グループ
net user secops /add /y
net localgroup "Users" secops /add
# 2) winget(または Chocolatey)でパッケージ
winget install --id=7zip.7zip -e; winget uninstall --id=7zip.7zip -e
# 3) サービス
sc config wuauserv start= auto
sc start wuauserv
# 4) ログ保持(例:Application = 64MB)
wevtutil sl Application /ms:67108864
# 5) RDP + NLA 推奨(Group Policy / System Properties > Remote)
- ACL: アクセス制御リスト — オブジェクトに対するきめ細かな権限。
- コンテキストスイッチ: スレッド切替のための CPU 状態の保存/復元。
- ジャーナリング FS: 変更をジャーナルに記録して障害耐性を高める FS。
- Kernel/User モード: 許可される操作を規定する CPU 特権レベル。
- ページング: RAM とディスク間でページを移動。
- プリエンプション: スケジューラが実行中スレッドを中断し別のスレッドを実行。
- システムコール: ユーザーモードからカーネルサービスへの API 境界。
- H1/H2 にキーワードを入れる:“Operating System Basics”“OS for Cybersecurity”“Linux vs Windows administration”。
- Linux CLI、Windows Registry、SIEM/Logging、Threat Hunting への内部リンクを追加。
- ダウンロード可能な チートシート と ラボスクリプト を用意して滞在時間と被リンクを強化。
- JSON-LD(FAQPage) で FAQ をマークアップしてリッチリザルトを狙う。