← Security from Zeroの一覧へ

Security from Zero 第3回:OS、ユーザー、アクセス権

アラートの背景にあるWindowsとLinuxの基礎。ファイル、アカウント、権限、プロセス、サービスを読み、小さなシステム観察レポートを作ります。

この回: 第3回・読む、実践する、まとめるまで約4時間出典確認日: 2026/10/21更新日: 2026/10/22

30秒でわかる要点

この回で学ぶこと
WindowsとLinuxのファイルとアクセスの仕組みを学びます。自分用の練習フォルダーで権限を読み、プロセスを観察し、管理されるサービスとの違いを理解します。
関係するチーム
SOCアナリストやジュニアセキュリティアナリストを目指す人
最初にやること
通常ユーザーでWindows PowerShellを開き、以下の一意な練習フォルダーを作ります。ワークブックに観察を記録してください。
始める前に
画面の値は説明用です。Linux演習は既存のUbuntu環境とroot以外のユーザーが必要です。Windowsだけなら任意です。権限の一覧だけで実効アクセス全体は判断できません。
第3回。ユーザー、ファイル、権限、プロセス、サービスを理解し、システムの観察メモを書く。
この回でいちばん大事なこと

アラートはOSの中で起きた操作を示します。ユーザー、パス、権限、プロセス、サービスを確認してから、意味を判断しましょう。

「プログラムが実行された」という情報だけでは、まだ問いが残ります。どこに保存され、誰のアカウントで実行され、そのアカウントは何にアクセスできたのか。利用者のアプリなのか、サービスなのか。これらが、端末アラートを読み解くOSの情報です。

第2回のネットワークに続き、Windowsの基礎と、対応するLinuxのコマンドを学び、システム観察レポートを作ります。面接でユーザー、ファイルの権限、プロセスを聞かれたときに、実際の作業を説明できるようにします。

用意するもの: 自分のWindows PCと、通常のWindows PowerShell。Windows演習では、一時ディレクトリに一意な名前の練習フォルダーを作り、自分の操作を観察します。Linuxは任意で、既存のUbuntu、仮想マシン、WSLなどを、root以外の通常ユーザーで使います。Windowsしかなければ、Windowsの作業を終え、Linuxは次の学習課題と記録してください。この回のWindows演習を終えるために、別のOSをインストールする必要はありません。

第3回のワークブックをダウンロードしてください。両方の演習と記録で約4時間が目安です。図は注釈付きの教材用イメージで、実際のインシデントの画面ではありません。図は選択すると元のサイズで開けます。

1. OSの見取り図を作る

OSはファイル、メモリ、プロセス、機器、ユーザーなどの資源とアクセスを管理します。シェルはコマンドを受け取って解釈します。コマンドプロンプト、PowerShell、Bashは別のシェルで、構文をそのまま入れ替えて使うことはできません。ターミナルはシェルとのやり取りを表示するアプリであり、別のOSではありません。

OSを見る5つの観点。ユーザーは操作するID、権限は許可される操作、パスは保存先、プロセスはプログラムの実行中インスタンス、サービスはサービスマネージャーが管理する仕事。実行ファイル名だけで判断せず、これらを結びつける。

図1:端末の観察を解釈する前に集めたい5つの事実。

概念 Windowsの例 Ubuntuの例
ユーザー LAB\learnerと、グループやトークンの状況。 learnerと、数値のUID・グループID。
ファイルのパス C:\Users\learner\Documents\note.txt /home/learner/note.txt
シェル Windows PowerShell、コマンドプロンプト。 一般にはBash。
権限 ユーザー・グループごとのアクセス制御エントリ。 所有者・グループ・その他のモードビット。ACLなどが加わる場合もある。
プロセス PIDを持つ、実行中のメモ帳。 PIDを持つ、実行中のBash。
サービスの管理 Windowsのサービスコントロールマネージャー。 Ubuntuでは一般にsystemd。別の仕組みを使う環境もある。

保存された1つのプログラムから、複数のプロセスが起動することがあります。バックグラウンドのプロセスが、必ずサービスとは限りません。サービスマネージャーが管理する仕事がサービスで、複数のプロセスを使ったり、1つのプロセスが複数のサービスを収容したりします。1対1とは限りません。

2. 演習A:Windowsの練習フォルダーを使う

Windows PowerShellを、管理者としてではなく普通に開き、以下を実行します。

$lab = Join-Path $env:TEMP ('secops-zero-' + [guid]::NewGuid().ToString('N'))
New-Item -ItemType Directory -Path $lab | Out-Null
Set-Location -LiteralPath $lab
Set-Content -LiteralPath .\note.txt -Value 'baseline'
Get-Location
Get-ChildItem
Get-Content -LiteralPath .\note.txt

最初の行は一時ディレクトリの中に一意なパスを作ります。$labはそのパスを保持する変数で、ランダムな末尾によって他のファイルとの重複を避けます。New-Itemでフォルダーを作り、Set-Locationで移動し、Set-Contentでテスト用ファイルに書き込みます。後ろの3つは場所、一覧、内容を確認するコマンドです。

PowerShellの模式図。ユーザーの一時ディレクトリ内に、一意なsecops-zeroフォルダーがある。Get-Locationで作業場所、Get-ChildItemでnote.txt、Get-Contentでbaselineを表示。現在のディレクトリ、ファイル名、内容を分けて読む。ユーザー名や末尾は説明用。

図2:ファイルを操作する前に、自分がどこにいるかを確かめます。別の場所で成功しても、正しい作業とは限りません。

絶対パスはC:\Users\learner\...のようにルートから場所を示します。相対パスは現在の場所から解釈します。.\note.txtは今いるディレクトリ内のファイル、..は親ディレクトリです。

PowerShellではcdやdirもエイリアスとして使えますが、正式なコマンドレット名で学ぶと何をしたか説明しやすくなります。Ubuntuのパスは普通/、Windowsの例では\を使います。Linuxのファイルシステムは通常、大文字と小文字を区別し、一般的なWindowsのパスでは区別しません。ただし、設定やマウント先によって異なります。

確認ポイント: 練習フォルダーの完全なパス、ファイル名、内容を、別々の観察として示してください。公開用には実際の個人パスを伏せます。メモを保存した後、作成した練習フォルダーだけをエクスプローラーで削除できます。

3. 演習B:WindowsのIDと権限を読む

練習フォルダーにいる状態で実行します。

whoami
Get-Acl -LiteralPath .\note.txt | Format-List Owner, AccessToString
icacls .\note.txt

whoamiは現在のアカウントを示します。Get-Aclはセキュリティ記述子から所有者とアクセスエントリを表示します。ここでのicaclsは変更オプションを付けていないため、ファイルの**DACL(随意アクセス制御リスト)**を表示します。

icaclsのFはフルアクセス、Mは変更、RXは読み取りと実行、Rは読み取り、**(I)**は継承されたエントリを示します。表示されるアカウントや権限はフォルダーの設定によって異なります。所有者は重要な情報ですが、それだけでDACLが許可するすべての操作が分かるわけではありません。

権限の比較。Windowsの例ではnote.txtにLAB\learner:(I)(M)を表示し、そのアカウントへの継承された変更権限を示す。Linuxの例は-rw-------、所有者learner、グループlearnerで、所有者だけに読み書きのモードビットがある。別々の小さな例であり、同一の完全なアクセスポリシーではない。

図3:誰に、何が許可され、どこから継承されたかを読みます。説明のため簡略化しています。

実効アクセスは、特定のユーザーが特定の状況で実際に持つアクセスです。グループ、継承と明示のエントリ、拒否、特権、その他の制御が関わります。ネットワーク共有なら共有側の権限も加わります。1つの許可エントリだけで、実効アクセス全体を評価したことにはなりません。

今回は表示されたエントリと、自分が成功した操作を説明します。システムフォルダー、共有ドライブ、他の人のファイルの権限は変更しません。次のLinux演習では、新しく作ったテストファイルだけで制御された権限変更を試します。

確認ポイント: 権限の継承とは何か、「自分が所有者」という情報だけではなぜアクセス全体を説明できないのかを話してみてください。

4. 演習C:Linuxのテストファイルで権限を試す

既存のUbuntuのBashで、root以外のユーザーとして行います。idでIDを確認し、uid=0なら通常ユーザーでやり直してください。rootは多くの通常のファイル権限チェックを回避できます。以下はBash用で、PowerShell用ではありません。

id
lab_dir="$(mktemp -d /tmp/secops-zero.XXXXXX)"
cd "$lab_dir"
printf 'baseline\n' > note.txt
pwd
ls -ld .
ls -l note.txt
cat note.txt

mktemp -dは一意な非公開ディレクトリを作ります。"$lab_dir"の引用符はパスをひとまとまりとして扱うためです。>はファイルに書き込み、既存の内容を上書きすることがあるため、この演習は新しいディレクトリで行います。ls -lは属性、catは内容を読みます。

テストファイルだけを変更し、追記を試します。

chmod 400 note.txt
printf 'second line\n' >> note.txt

通常ユーザーの所有者が、普通の書き込み可能なLinuxファイルシステムで行った場合、追記は権限エラーになります。400は所有者に読み取りだけを許し、書き込みを許さないためです。実際の結果を記録し、成功したなら、想定の答えを写さずにアカウントと環境を確かめます。

所有者の読み書きを戻し、再び試します。

chmod 600 note.txt
printf 'second line\n' >> note.txt
cat note.txt
stat -c '%a %U:%G %n' note.txt

Ubuntu Bashの模式画面。chmod 400 note.txtの後、通常ユーザーの追記にPermission deniedが返る。chmod 600の後は成功し、catでbaselineとsecond lineを表示する。想定される通常のローカルファイル環境での結果であり、読者は自分の結果を記録する。

図4:使い捨てのファイルで1つの条件を変え、結果を比較します。レポートが完成するまでフォルダーを残してください。

-rw-------の先頭はファイルの種類、続く3文字ずつは所有者、グループ、その他です。rは読み取り、wは書き込み、xは実行。数値では4、2、1なので、所有者の読み書きは6になります。

ディレクトリの権限は効果が異なります。読み取りは名前の一覧、実行は通過、書き込みは必要な他の権限と合わせてエントリの変更に関わります。読み取り専用のファイルでも、親ディレクトリを変更できる人が削除できる場合があります。ACL、マウント、追加のセキュリティ制御も関わるため、モードビットは全体の一部です。

確認ポイント: 400と600、>と>>の違いと、ファイルの書き込みビットだけでは削除の可否を判断できない理由を説明します。Linuxを実行できなかった場合は「未実行」と記録します。

5. 演習D:プロセスとサービスを分ける

Windowsでメモ帳を普通に起動し、タスクマネージャーの詳細でPIDと時刻を記録します。次のPIDを、その値に置き換えてください。

Get-Process -Id 4280 | Select-Object Id, ProcessName, StartTime, Path
Get-Service -Name EventLog | Select-Object Name, Status

最初のコマンドは1つのプロセスを読みます。権限や、終了済みであることによって一部の情報が取れない場合もあります。次はWindows Event Logサービスの状態を管理機構に問い合わせます。停止・起動する操作ではありません。図を写さず、自分の表示された状態を記録します。

Windowsのプロセスとサービスを別々に示す。メモ帳の例はPID 4280とアプリのパス。Get-ServiceはEventLogサービスの状態Runningを返す。サービス名はPIDではなく、Runningは観察時点の状態であり、ログが完全に取れているという確認ではない。

図5:プロセスの一覧とサービスの状態は、別の問いに答えます。

UbuntuのBashでは、自分のシェルと、最初のプロセスを調べます。

ps -p $$ -o pid,ppid,user,comm
ps -p 1 -o comm=

$$は現在のシェルのPIDに展開されます。PPIDは親プロセスのIDです。PID 1がsystemdであれば、1つのサービスを問い合わせられます。

systemctl status systemd-journald --no-pager

コンテナーやWSLには、PID 1がsystemdではない環境もあります。その場合はsystemctlを省き、制約として記録します。サービス管理機構が使えないことだけで、ログが無効だとは判断できません。サービスのRunningやactiveも、必要なすべてのイベントが集まっている証明ではありません。

確認ポイント: プロセスとサービスを1つずつ、名前を混同せずに説明します。メモ帳は通常の方法で閉じてください。サービスを停止しなくても、状態の読み方は学べます。

6. 観察をアナリストの作業につなげる

架空の練習例として、一時フォルダーから実行ファイルが起動したアラートを考えます。フォルダー名だけで判断せず、アカウントとプロセス、正確なパスと時刻、適用される権限、起動元、ほかの根拠を調べます。正規のインストーラーも攻撃者も、一時フォルダーを使う場合があります。

記録する観察 役立つ理由 まだ分からないこと
ユーザーと関連グループ IDの状況を示す。 操作が許可されたものか。
正確なパス 対象の場所を特定する。 内容、由来、信頼性。
アクセスエントリやモードビット アクセス設定の一部を示す。 あらゆる状況での完全な実効アクセス。
PID、名前、観察時刻 その時点の実行中インスタンスを識別する。 意図、完全な親子関係、すべての過去の操作。
サービス名と観察した状態 管理されるサービスの現在の状態を示す。 ログの完全性やセキュリティ全体の健全性。

ワークブックを使い、環境、コマンド、タイムゾーン、注釈付きの観察3点、解釈、限界を、1枚のシステム観察レポートにまとめます。WindowsとLinuxは分け、実行していないコマンドや演習を明記してください。

実施後なら、「専用の練習フォルダーを作り、Windowsのアクセスエントリを読み、Linuxの所有者権限を試し、プロセスとサービスの観察を再現手順とともに記録した」と説明できます。Linuxを実行していなければ、その部分は含めません。

7. 面接で説明する準備をする

質問 答えに含めたいこと
ターミナルとシェルの違いは何か。 ターミナルはやり取りの場、シェルはコマンドを解釈するもの。使ったシェル名も挙げる。
絶対パスとは何か。 ルートから示した場所。相対パスは現在の場所に依存する。
Linuxの600は何を表すか。 所有者の読み書き。グループとその他のモードビットはなし。別の制御も関わり得る。
chmod 400の後に追記できなかったのはなぜか。 想定した条件では、通常ユーザーがテストファイルの書き込み権限を持たなかったため。
バックグラウンドのプロセスはすべてサービスか。 いいえ。サービスは管理機構によって管理され、プロセスとの対応はさまざま。
ログ用サービスが動いていれば、ログは完全か。 いいえ。設定、必要な情報源、転送、保持、実際の記録を確認する。

Windows演習を再現し、小さな権限の例を読み、ファイル・プロセス・サービスを区別できたら、第4回:初めてのセキュリティログに進みます。

出典と実行確認

Windowsのコマンドは2026年10月21日にMicrosoftのNew-Item、Get-Acl、icacls、Get-Process、Get-Serviceと照合しました。公開作業環境ではWindows実機で実行できていません。

LinuxはUbuntuのコマンドライン入門、GNUのファイル権限、chmod、mktemp、上流のsystemctlマニュアルを参照してください。ファイル権限の演習は、公開作業環境の通常のLinuxユーザーで確認しました。すべてのUbuntu、ファイルシステム、WSLの構成を検証したものではありません。Windows EventLogとLinux journaldの状態は図の説明例です。

2026年10月21日: 日本語・英語で初版公開。2026年10月22日(日本時間): 公開された第4回へのリンクを追加しました。全体プランに戻る。

Security from Zeroの一覧へ →Read in English ↗