概要
任意アクセス制御(DAC: Discretionary Access Control)は、UNIX/Linux システムで最も基本的なアクセス制御モデルであり、ファイルやディレクトリの所有者がアクセス権限を制御できることを意味します。本章では、DACの基礎からACL(Access Control List)による細かなアクセス制御、さらに拡張属性の使用方法について学びます。
1. 標準のアクセス権と所有権の基本
Linux では、各ファイルやディレクトリに対して次の 3 種類の属性が設定されています:
- 所有者(owner)
- 所属グループ(group)
- その他のユーザー(others)
それぞれに対して以下のアクセス権を設定可能です:
| 権限 | 意味 |
|---|---|
| r | 読み取り(read) |
| w | 書き込み(write) |
| x | 実行(execute) |
表示方法例(ls -l)
-rwxr-xr-- 1 alice devteam 1234 6月 7 12:00 script.sh
- 所有者(alice)には rwx
- グループ(devteam)には r-x
- その他ユーザーには r–
2. SUID, SGID, Sticky Bit の理解
SUID(Set UID)
バイナリ実行時にそのファイルの所有者の権限で実行される。
chmod u+s /path/to/file
ls -l → -rwsr-xr-x
例:/usr/bin/passwd(rootの権限で動作)
SGID(Set GID)
- ファイル:所有グループの権限で実行
- ディレクトリ:そのディレクトリに作成されたファイルは同じグループを継承
chmod g+s /shared/folder
ls -ld → drwxr-sr-x
Sticky Bit
- ディレクトリに設定:所有者以外のユーザーはファイル削除不可
/tmpによく使われる
chmod +t /tmp
ls -ld → drwxrwxrwt
3. ACL(Access Control List)の活用
ACL は、標準の3種のアクセス権に加えて特定ユーザーやグループごとに細かい権限を追加できる拡張機能です。
使用条件
- 対応するファイルシステム(ext4, XFS など)
- ACLがマウントオプションで有効になっていること
mount -o remount,acl /mount/point
ACL の確認(getfacl)
getfacl file.txt
出力例:
# file: file.txt
# owner: alice
# group: devteam
user::rw-
user:bob:r--
group::r--
mask::r--
other::---
ACL の設定(setfacl)
# bob に読み取り権限付与
setfacl -m u:bob:r-- file.txt
# グループ marketing に読み書き権限付与
setfacl -m g:marketing:rw- file.txt
ACL の削除
# bob に対するACL削除
setfacl -x u:bob file.txt
# ACL 全削除
setfacl -b file.txt
4. 拡張属性(Extended Attributes)
Linux では、拡張属性を使ってファイルに任意のメタデータを付加できます。これは、セキュリティ情報(例:SELinuxのコンテキスト)やアプリケーション固有のデータに使われます。
拡張属性の確認(getfattr)
getfattr -d file.txt
出力例:
# file: file.txt
user.comment="Confidential document"
拡張属性の追加(setfattr)
setfattr -n user.comment -v "Confidential document" file.txt
拡張属性の削除
setfattr -x user.comment file.txt
💡 ヒント:属性名のプレフィックス(
user.)は必須。これは拡張属性の名前空間を示します。
5. 実践例
ACLで特定ユーザーだけに書き込み許可
touch report.txt
setfacl -m u:bob:rw- report.txt
ディレクトリにデフォルトACL設定(サブファイルに継承)
setfacl -m d:u:carol:r-- /project/docs
6. 関連コマンドまとめ
| コマンド | 役割 |
|---|---|
ls -l | 標準アクセス権表示 |
chmod, chown | 権限・所有者の変更 |
getfacl, setfacl | ACL の取得・設定 |
getfattr, setfattr | 拡張属性の取得・設定 |
章末問題(四択)
問1. ACL の設定を削除するコマンドはどれか?
A. chmod -x
B. setfacl -x
C. getfacl -x
D. setfattr -d
解説
正解:B
setfacl -x で特定のACL項目を削除します。
問2. SUID ビットを設定したときに表示されるパーミッション表記は?
A. rwxr-xr-x
B. rwsr-xr-x
C. rwxrwsr-x
D. rwxr-xr-t
解説
正解:B
SUIDが有効だと所有者の実行権が s になります。
問3. setfattr コマンドで正しい使用例はどれか?
A. setfattr -n comment -v “test” file.txt
B. setfattr -a user.comment “test” file.txt
C. setfattr -n user.comment -v “test” file.txt
D. setfattr file.txt user.comment “test”
解説
正解:C
-n で属性名(user. 名前空間)を指定し、-v で値を与える形式です。
問4. ACL における mask は何を制御するか?
A. ファイルの所有者権限
B. グループの実行権限
C. 追加されたACLユーザー・グループの最大権限
D. その他のユーザーの権限
解説
正解:C
mask はACLで指定されたユーザーやグループの最大許可レベルを制限します。
コメント