ACL(Access Control List)とは?アクセス制御の「門番」を徹底解説

プログラミング・IT

会社のビルに入る時、IDカードをかざして入退室しますよね。特定の部屋には特定の人しか入れないようになっていたり、時間帯によってアクセスできる人が変わったりします。

コンピュータの世界でも、同じような「誰に何を許可するか」を管理する仕組みがあります。それがACL(Access Control List:アクセス制御リスト)です。

ACLは「門番」や「警備員」のような存在で、ネットワークやファイルシステムへのアクセスを細かく制御します。正しい権限を持った人やデバイスだけを通し、それ以外はブロックするんです。

この記事では、ACLの基本から実践的な使い方まで、初心者の方にも分かりやすく解説していきます。


スポンサーリンク

ACLって何?基本をサクッと理解しよう

ACL(Access Control List)は、リソース(ファイル、ネットワーク、データベースなど)へのアクセス権限を定義したリストのことです。

「誰が」「何を」「どうできるか」

ACLは基本的に、次の3つの要素で構成されます。

主体(Subject):誰が

  • ユーザー
  • グループ
  • IPアドレス
  • ネットワーク

対象(Object):何を

  • ファイル
  • ディレクトリ
  • ネットワークトラフィック
  • アプリケーション

権限(Permission):どうできるか

  • 読み取り(Read)
  • 書き込み(Write)
  • 実行(Execute)
  • 許可(Permit)
  • 拒否(Deny)

イベント会場のたとえ

分かりやすく、イベント会場で考えてみましょう。

一般入場者(Guest)

  • ロビーに入れる ✓
  • イベントホールに入れる ✓
  • バックステージには入れない ✗

スタッフ(Staff)

  • ロビーに入れる ✓
  • イベントホールに入れる ✓
  • バックステージに入れる ✓
  • 機材室には入れない ✗

管理者(Admin)

  • すべてのエリアに入れる ✓

このように、「誰が」「どこに」「入れるか入れないか」を決めるリストが、ACLなんです。


ACLの種類:2つの大きな分野

ACLは、主に2つの分野で使われます。

1. ネットワークACL

役割:
ネットワーク機器(ルーター、ファイアウォール、スイッチ)で、通信の許可・拒否を制御します。

用途:

  • 特定のIPアドレスからの接続を許可
  • 特定のポート番号へのアクセスを拒否
  • 社内ネットワークと外部ネットワークの境界を守る
  • DoS攻撃の緩和

例:
「192.168.1.0のネットワークから、10.0.0.0のネットワークへのHTTP通信(ポート80)を許可する」

2. ファイルシステムACL

役割:
ファイルやディレクトリへのアクセス権限を細かく制御します。

用途:

  • 特定のユーザーだけがファイルを編集できる
  • グループのメンバーは読み取りのみ可能
  • 他のユーザーはアクセス不可

例:
「営業部のメンバーは売上データを読み書きできるが、他の部署は読み取りのみ」


ネットワークACL:通信の門番

ネットワークでのACLについて、詳しく見ていきましょう。

基本的な構造

ネットワークACLは、複数のルール(エントリ)から構成されます。

ACLエントリの例:

1. permit tcp 192.168.1.0 0.0.0.255 any eq 80
2. permit tcp 192.168.1.0 0.0.0.255 any eq 443
3. deny ip any any

意味:

  1. 192.168.1.0/24からのHTTP(ポート80)を許可
  2. 192.168.1.0/24からのHTTPS(ポート443)を許可
  3. その他すべての通信を拒否

処理の順序

ACLは、上から順番に評価されます。

重要なポイント:

  • 最初にマッチしたルールが適用される
  • それ以降のルールは無視される
  • 最後には暗黙的な「すべて拒否」がある(明示的に書く場合もある)

たとえ:
ルール1で「許可」にマッチしたら、ルール2以降は見ません。だから、順序がとても重要なんです。

標準ACLと拡張ACL

Ciscoルーターなど、多くのネットワーク機器では2種類のACLがあります。

標準ACL(Standard ACL)

  • 送信元IPアドレスだけで判断
  • シンプルだが、細かい制御はできない
  • 番号:1-99、1300-1999

例:

access-list 10 permit 192.168.1.0 0.0.0.255

拡張ACL(Extended ACL)

  • 送信元・宛先IP、プロトコル、ポート番号などで判断
  • 細かい制御が可能
  • 番号:100-199、2000-2699

例:

access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 80

インバウンドとアウトバウンド

ACLは、適用する方向を指定します。

インバウンド(Inbound)
インターフェースに入ってくる通信をチェック。

アウトバウンド(Outbound)
インターフェースから出ていく通信をチェック。

どちらを使う?

  • 通常はインバウンドで制御する方が効率的
  • トラフィックがルーターに入る前にブロックできる

ファイルシステムACL:ファイルの門番

ファイルやディレクトリのACLについて見てみましょう。

基本的なUnix/Linux権限

まず、従来の権限システムをおさらいします。

9ビット権限:

rwxr-xr--

意味:

  • 最初の3文字(rwx):所有者の権限
  • 次の3文字(r-x):グループの権限
  • 最後の3文字(r–):その他のユーザーの権限

制限:

  • 1つのファイルに対して、所有者、グループ、その他の3つしか設定できない
  • 複数のユーザーに個別の権限を与えられない

POSIX ACL(Linux)

POSIX ACLは、従来の権限システムを拡張し、より柔軟な制御を可能にします。

できること:

  • 複数のユーザーに個別の権限を設定
  • 複数のグループに異なる権限を設定
  • デフォルトACL(新規作成ファイルに自動適用)

例:

user::rwx
user:alice:rw-
user:bob:r--
group::r-x
group:developers:rwx
mask::rwx
other::---

意味:

  • 所有者:読み書き実行すべて可能
  • aliceユーザー:読み書き可能
  • bobユーザー:読み取りのみ
  • developersグループ:読み書き実行すべて可能
  • その他:アクセス不可

Windows ACL

WindowsのNTFS ACLは、さらに細かい制御が可能です。

権限の種類:

  • フルコントロール
  • 変更
  • 読み取りと実行
  • 読み取り
  • 書き込み
  • 特殊なアクセス許可(詳細設定)

継承:
親フォルダの権限が、子フォルダやファイルに自動的に継承されます。

明示的な拒否:
「許可」より「拒否」が優先されます。これは強力ですが、注意が必要です。


ネットワークACLの設定例

実際の設定例を見てみましょう。

Ciscoルーターでの設定

標準ACLの例:

! 192.168.1.0/24からのアクセスを許可
access-list 10 permit 192.168.1.0 0.0.0.255

! インターフェースに適用
interface GigabitEthernet0/1
 ip access-group 10 in

拡張ACLの例:

! 内部ネットワークからWebアクセスを許可
access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 80
access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 443

! SSHアクセスは管理者IPのみ許可
access-list 100 permit tcp host 192.168.1.100 any eq 22

! その他すべて拒否
access-list 100 deny ip any any

! インターフェースに適用
interface GigabitEthernet0/0
 ip access-group 100 in

名前付きACL

番号ではなく、名前を付けることもできます。管理しやすくなります。

ip access-list extended WEB-TRAFFIC
 permit tcp 192.168.1.0 0.0.0.255 any eq 80
 permit tcp 192.168.1.0 0.0.0.255 any eq 443
 deny ip any any

interface GigabitEthernet0/0
 ip access-group WEB-TRAFFIC in

AWSセキュリティグループ

クラウドでもACLは重要です。AWSの例:

インバウンドルール:

タイププロトコルポート送信元
HTTPTCP800.0.0.0/0
HTTPSTCP4430.0.0.0/0
SSHTCP22203.0.113.0/24

これで、HTTPとHTTPSは全世界から、SSHは特定のIPからのみアクセス可能になります。


ファイルシステムACLの設定例

LinuxとWindowsでのACL設定を見てみましょう。

Linux(POSIX ACL)

ACLの表示:

getfacl /path/to/file

ACLの設定:

# aliceユーザーに読み書き権限を付与
setfacl -m u:alice:rw /path/to/file

# developersグループに読み取り権限を付与
setfacl -m g:developers:r /path/to/file

# bobユーザーのアクセスを拒否(権限なし)
setfacl -m u:bob:--- /path/to/file

デフォルトACLの設定:

# ディレクトリに対して設定(新規ファイルに自動適用)
setfacl -d -m u:alice:rw /path/to/directory

ACLの削除:

# 特定のエントリを削除
setfacl -x u:alice /path/to/file

# すべてのACLを削除
setfacl -b /path/to/file

再帰的な設定:

# ディレクトリ内のすべてに適用
setfacl -R -m u:alice:rwx /path/to/directory

Windows(NTFS ACL)

GUIでの設定:

  1. ファイルまたはフォルダを右クリック
  2. プロパティ → セキュリティタブ
  3. 編集ボタンをクリック
  4. 追加ボタンでユーザーやグループを追加
  5. 権限を選択してOK

コマンドラインでの設定(icacls):

REM 読み取り権限を付与
icacls "C:\Data" /grant Alice:(R)

REM 変更権限を付与
icacls "C:\Data" /grant Bob:(M)

REM フルコントロールを付与
icacls "C:\Data" /grant Developers:(F)

REM 継承を有効化
icacls "C:\Data" /inheritance:e

REM 権限を削除
icacls "C:\Data" /remove Alice

PowerShellでの設定:

# ACLオブジェクトを取得
$acl = Get-Acl "C:\Data"

# アクセスルールを作成
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Alice","Modify","Allow")

# ルールを追加
$acl.SetAccessRule($rule)

# ACLを適用
Set-Acl "C:\Data" $acl

ACL設計のベストプラクティス

効果的なACL設計のコツを紹介します。

最小権限の原則

必要最小限の権限だけを与えます。

悪い例:
全員にフルコントロールを与える。

良い例:

  • 閲覧だけ必要な人には読み取り権限のみ
  • 編集が必要な人には変更権限
  • 管理者だけがフルコントロール

拒否より許可で設計

基本方針:

  1. デフォルトはすべて拒否
  2. 必要なものだけ明示的に許可

理由:
拒否ルールを多用すると、管理が複雑になります。

ネットワークACLの順序に注意

重要:

  • より具体的なルールを上に
  • より一般的なルールを下に

悪い例:

1. deny ip any any  ← これが最初だと、以降のルールが無意味
2. permit tcp 192.168.1.0 0.0.0.255 any eq 80

良い例:

1. permit tcp 192.168.1.0 0.0.0.255 any eq 80
2. permit tcp 192.168.1.0 0.0.0.255 any eq 443
3. deny ip any any

ドキュメント化

ACLの目的や変更履歴を文書化します。

コメントの活用:

! 営業部からWebサーバーへのアクセスを許可(2025-01-15追加)
access-list 100 permit tcp 192.168.1.0 0.0.0.255 10.0.0.10 0.0.0.0 eq 80

定期的な見直し

古いルールが残っていないか、定期的にチェックします。

確認すべきこと:

  • 使われていないルール
  • 退職者のアカウント
  • 期限切れのアクセス権

トラブルシューティング

ACL関連の問題を解決しましょう。

ネットワークACLのトラブル

症状:意図した通信がブロックされる

確認手順:

1. ACLの内容を確認

show access-lists

2. どのインターフェースに適用されているか確認

show ip interface GigabitEthernet0/0

3. マッチしたルールを確認

show access-lists 100

各ルールの右側に表示される数字が、マッチした回数です。

4. ルールの順序を見直す
必要なら、ACLを再作成して正しい順序にします。

ファイルシステムACLのトラブル

症状:権限があるはずなのにアクセスできない

確認手順(Linux):

1. 実際の権限を確認

getfacl /path/to/file
ls -l /path/to/file

2. 有効な権限を確認
マスクエントリが権限を制限していないか確認します。

3. 親ディレクトリの権限を確認
ディレクトリに実行権限がないと、中に入れません。

getfacl /path/to/

確認手順(Windows):

1. 有効なアクセス許可を確認
セキュリティタブ → 詳細設定 → 「有効なアクセス」タブ

2. 継承を確認
親フォルダから意図しない権限が継承されていないか確認。

3. 拒否エントリを確認
「拒否」が「許可」より優先されます。


パフォーマンスへの影響

ACLは、パフォーマンスに影響することがあります。

ネットワークACL

影響:

  • ルーター/ファイアウォールのCPU負荷増加
  • ACLエントリ数が多いほど処理時間が増える
  • 拡張ACLは標準ACLより負荷が高い

最適化:

  • よく使うルールを上に配置
  • 不要なルールを削除
  • 可能ならハードウェアアクセラレーション機能を使う

ファイルシステムACL

影響:

  • ファイルアクセス時のチェック処理増加
  • ACLエントリ数が多いほど遅くなる可能性

最適化:

  • 必要最小限のエントリに絞る
  • グループを活用して、個別のユーザー指定を減らす

まとめ:ACLはアクセス制御の基本

ACL(Access Control List)は、セキュリティの基盤となる重要な仕組みです。

この記事のポイント:

  • ACLは「誰が」「何を」「どうできるか」を定義するリスト
  • ネットワークACLとファイルシステムACLの2種類がある
  • ネットワークACLは通信の許可・拒否を制御
  • ファイルシステムACLはファイルやディレクトリへのアクセスを制御
  • ルールは上から順に評価される(順序が重要)
  • 最小権限の原則に従う
  • 定期的な見直しとドキュメント化が重要
  • パフォーマンスへの影響も考慮する

ACLの役割:

  • セキュリティの向上
  • アクセス制御の細かな設定
  • コンプライアンス要件への対応
  • リソースの適切な共有

適切なACL設計と運用により、セキュリティと利便性のバランスを取ることができます。

ネットワーク管理者やシステム管理者にとって、ACLは必須のスキル。基本を理解して、安全で効率的なシステムを構築しましょう!

コメント

タイトルとURLをコピーしました