拡張属性(Extended Attributes)
拡張属性は、ファイルやディレクトリに追加のメタデータを格納する仕組みです。
拡張属性の基本
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
拡張属性の名前空間:
user.
: ユーザー定義属性system.
: システム属性security.
: セキュリティ属性trusted.
: 信頼された属性
xattrの操作
# 拡張属性の設定
setfattr -n user.author -v "John Doe" test_file.txt
setfattr -n user.project -v "WebApp" test_file.txt
# 拡張属性の確認
getfattr -d test_file.txt
getfattr -n user.author test_file.txt
# すべての拡張属性を表示
ls -l --time-style=long-iso test_file.txt
getfattr -d test_file.txt
# 拡張属性の削除
setfattr -x user.author test_file.txt
実践的な拡張属性の使用例
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# プロジェクト管理情報を付与
setfattr -n user.status -v "draft" doc1.txt
setfattr -n user.status -v "review" doc2.txt
setfattr -n user.status -v "approved" doc3.txt
# 作成者情報
setfattr -n user.author -v "Alice" doc1.txt
setfattr -n user.author -v "Bob" doc2.txt
# バージョン情報
setfattr -n user.version -v "1.0" doc1.txt
setfattr -n user.version -v "2.1" doc2.txt
# ステータス別にファイルを検索
find . -name "*.txt" -exec sh -c 'getfattr -n user.status "$1" 2>/dev/null | grep -q "review" && echo "$1"' _ {} \;
ACL (Access Control Lists)
ACLは、通常のUNIXパーミッション(rwx)を拡張した、より細かいアクセス制御を提供します。
ACLの基本概念
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
ACLを使うと:
- 複数のユーザー/グループに個別の権限設定
- デフォルトACLでディレクトリ内の新規ファイルに自動適用
- より詳細な権限管理が可能
ACLの設定と確認
# 現在のACLを確認
getfacl document.txt
# 特定ユーザーに権限を付与
setfacl -m u:alice:rw document.txt
setfacl -m u:bob:r document.txt
# グループに権限を付与
setfacl -m g:developers:rw document.txt
# ACLの確認
getfacl document.txt
ls -l document.txt # +マークが付く
# 特定のエントリを削除
setfacl -x u:alice document.txt
# すべてのACLを削除
setfacl -b document.txt
ディレクトリのデフォルトACL
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# ディレクトリにデフォルトACLを設定
setfacl -d -m u:alice:rwx shared_folder/
setfacl -d -m g:team:rw shared_folder/
# デフォルトACLの確認
getfacl shared_folder/
# 新しいファイルを作成してACLを確認
touch shared_folder/new_file.txt
getfacl shared_folder/new_file.txt
# 再帰的にACLを適用
setfacl -R -m u:bob:r shared_folder/
ファイル属性(File Attributes)
Linuxファイルシステムには、特殊な属性を設定できるものがあります。
基本的なファイル属性
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
主要なファイル属性:
i
: 変更不可(immutable)a
: 追記のみ(append-only)c
: 圧縮d
: ダンプ対象外s
: 安全削除u
: 削除取り消し可能
属性の設定と確認
# 現在の属性を確認
lsattr important.txt
# 変更不可属性を設定
chattr +i important.txt
# 変更を試みる(エラーになる)
echo "test" >> important.txt
rm important.txt
# 属性を解除
chattr -i important.txt
# 追記のみ属性
chattr +a secret.txt
echo "log entry" >> secret.txt # 成功
echo "overwrite" > secret.txt # エラー
# 複数属性の設定
chattr +ai backup.txt
システム管理での活用
# 重要な設定ファイルを保護
sudo chattr +i /etc/passwd
sudo chattr +i /etc/shadow
# ログファイルを追記のみに
sudo chattr +a /var/log/messages
# バックアップファイルを圧縮属性に
chattr +c *.backup
# 一時ファイルを安全削除対象に
chattr +s /tmp/sensitive_data
メタデータ管理の実践例
ドキュメント管理システム
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# ドキュメントに管理情報を付与
for doc in docs/drafts/*.md; do
setfattr -n user.status -v "draft" "$doc"
setfattr -n user.created -v "$(date +%Y-%m-%d)" "$doc"
setfattr -n user.author -v "$USER" "$doc"
done
# レビュー用ディレクトリにACL設定
setfacl -m u:reviewer:rwx docs/review/
setfacl -d -m u:reviewer:rw docs/review/
# 公開済みファイルを変更不可に
for file in docs/published/*; do
[ -f "$file" ] && chattr +i "$file"
done
バックアップシステム
#!/bin/bash
# backup_with_metadata.sh
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# ファイルをコピーし、メタデータを保持
find /home -type f -newer /tmp/last_backup -print0 | while IFS= read -r -d '' file; do
# ファイルをコピー
cp -p "$file" "$BACKUP_DIR/"
# バックアップ情報を拡張属性に記録
setfattr -n user.backup_date -v "$(date)" "$BACKUP_DIR/$(basename "$file")"
setfattr -n user.original_path -v "$file" "$BACKUP_DIR/$(basename "$file")"
done
# バックアップファイルを追記のみに
chattr +a "$BACKUP_DIR"/*
実践演習
演習1:プロジェクト管理システム
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
プロジェクト内のファイルに適切なメタデータとACLを設定してください。
解答例:
# 拡張属性でファイル分類
setfattr -n user.type -v "source" project/src/*
setfattr -n user.type -v "documentation" project/docs/*
setfattr -n user.type -v "test" project/tests/*
# 作成日時を記録
find project -type f -exec setfattr -n user.created -v "$(date +%Y-%m-%d)" {} \;
# 開発者グループにソースコードの読み書き権限
setfacl -R -m g:developers:rw project/src/
# ドキュメントは全員読み取り可能
setfacl -R -m g:all:r project/docs/
# テストファイルはテスターグループのみ
setfacl -R -m g:testers:rw project/tests/
演習2:セキュアファイル管理
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
機密ファイルとログファイルに適切な属性を設定してください。
解答例:
# 機密ファイルを変更不可に
chattr +i secret.txt
# ログファイルを追記のみに
chattr +a audit.log
# 機密情報を拡張属性で記録
setfattr -n user.classification -v "confidential" secret.txt
setfattr -n user.access_level -v "admin_only" secret.txt
# ACLで管理者のみアクセス可能に
setfacl -m u:admin:rw secret.txt
setfacl -m u::--- secret.txt # 所有者の権限も制限
setfacl -m g::--- secret.txt
setfacl -m o::--- secret.txt
トラブルシューティング
よくある問題と解決策
1. 拡張属性がサポートされていない
# ファイルシステムが拡張属性をサポートしているか確認
mount | grep -E '(ext[234]|xfs|btrfs)'
# マウントオプションを確認
mount | grep user_xattr
# 必要に応じて再マウント
sudo mount -o remount,user_xattr /dev/sda1
2. ACLが効かない
# ファイルシステムがACLをサポートしているか確認
tune2fs -l /dev/sda1 | grep acl
# ACLマウントオプション追加
sudo mount -o remount,acl /dev/sda1
3. ファイル属性が設定できない
# ファイルシステムの対応確認
lsattr / 2>/dev/null && echo "Supported" || echo "Not supported"
# 権限確認(root権限が必要な属性もある)
sudo chattr +i filename
まとめ
このレッスンでは、高度なファイル属性とメタデータ管理について学びました:
- 拡張属性による柔軟なメタデータ管理
- ACLによる詳細なアクセス制御
- ファイル属性による特殊な動作制御
- セキュリティと効率性を両立した管理手法
これらの機能を適切に活用することで、より安全で効率的なファイル管理が可能になります。
💡 次のレッスンでは、高度なファイル同期について学びます。