会社のビルに入る時、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
意味:
- 192.168.1.0/24からのHTTP(ポート80)を許可
- 192.168.1.0/24からのHTTPS(ポート443)を許可
- その他すべての通信を拒否
処理の順序
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の例:
インバウンドルール:
| タイプ | プロトコル | ポート | 送信元 |
|---|---|---|---|
| HTTP | TCP | 80 | 0.0.0.0/0 |
| HTTPS | TCP | 443 | 0.0.0.0/0 |
| SSH | TCP | 22 | 203.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での設定:
- ファイルまたはフォルダを右クリック
- プロパティ → セキュリティタブ
- 編集ボタンをクリック
- 追加ボタンでユーザーやグループを追加
- 権限を選択して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設計のコツを紹介します。
最小権限の原則
必要最小限の権限だけを与えます。
悪い例:
全員にフルコントロールを与える。
良い例:
- 閲覧だけ必要な人には読み取り権限のみ
- 編集が必要な人には変更権限
- 管理者だけがフルコントロール
拒否より許可で設計
基本方針:
- デフォルトはすべて拒否
- 必要なものだけ明示的に許可
理由:
拒否ルールを多用すると、管理が複雑になります。
ネットワーク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は必須のスキル。基本を理解して、安全で効率的なシステムを構築しましょう!


コメント