#1 はじめに
拡張属性はi-nodeに拡張属性名-値
の形式で保存され、
拡張属性名はnamespace.nameの形式をとります。
・namespace:以下のように4つの属性クラスに分類されます。
・name:namespace内で一意の名前を付けることができます。
拡張属性を使うと、従来のパミッション(rwx
)によるアクセス制御に比べ、
より細かいアクセス制御が可能になります。
属性クラス | 説明 |
---|---|
user | ユーザがファイルやディレクトリに任意の情報を付けるために使用する拡張属性 |
system | カーネルが使用する拡張属性。ACL(*1)が使用する。 |
security | OSのセキュリティモジュール(*2)が使用するセキュリティラベル用の拡張属性 |
trusted | ユーザプロセスから操作可能な点はuserと同じ。本属性を操作するためには、CAP_SYS_ADMINが必要 |
(*1) Access Control List | |
(*2) SELinux,SMAK等 |
#2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンの版数は以下のとりです。
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011
[root@server ~]# uname -r
4.18.0-240.el8.x86_64
#3 コマンド
拡張属性の設定、削除、参照は以下のコマンドを使います。
・setfattr:設定、削除
・getfattr:参照
#4 拡張属性の設定、削除方法
ここでは、属性クラスuserに対して各種操作を実行してみます。
##4.1 設定方法
[root@server test]# touch test.txt
作成したファイルを確認します。
[root@server test]# ls -l test.txt
-rw-r--r--. 1 root root 0 3月 8 20:22 test.txt
以下の拡張属性をtest.txtに設定してみます。
・拡張属性名:user.x1
・値:111
[root@server test]# setfattr -n user.x1 -v 111 test.txt
設定した拡張属性を表示してみます。
拡張属性名がuser.x1
、値が111
であることがわかります。
[root@server test]# getfattr -n user.x1 test.txt
# file: test.txt
user.x1="111"
以下の拡張属性をtest.txtに設定してみます。
・拡張属性名:user.x2
・値:222
[root@server test]# setfattr -n user.x2 -v 222 test.txt
設定した拡張属性を表示してみます。
拡張属性名がuser.x2
、値が222
であることがわかります。
[root@server test]# getfattr -n user.x2 test.txt
# file: test.txt
user.x2="222"
ファイルに設定した拡張属性を全て表示してみます。
[root@server test]# getfattr -d test.txt
# file: test.txt
user.x1="111"
user.x2="222"
次は、ロングオプション(--dump
)を使って、拡張属性を全て表示してみます。
[root@server test]# getfattr --dump test.txt
# file: test.txt
user.x1="111"
user.x2="222"
##4.2 削除方法
test.txtに設定されている拡張属性を確認します。
[root@server test]# getfattr -d test.txt
# file: test.txt
user.x1="111"
user.x2="222"
test.txtから拡張属性user.x1を削除します。
[root@server test]# setfattr -x user.x1 test.txt
test.txtの拡張属性を確認します。
拡張属性user.x1が削除されたことがわかります。
[root@server test]# getfattr -d test.txt
# file: test.txt
user.x2="222"
test.txtから拡張属性user.x2を削除します。
今度はロングオプション(--remove
)を使って、拡張属性を削除してみます。
[root@server test]# setfattr --remove user.x2 test.txt
test.txtの拡張属性を確認します。
拡張属性user.x2が削除されたことがわかります。
[root@server test]# getfattr -d test.txt
[root@server test]#
#5 エンコード方式の指定方法
拡張属性の値には文字列の他、16進数やBase64を使用することができます。
ここでは、拡張属性の値に16進数の設定、削除をしてみます。
[root@server test]# setfattr -n user.x1 -v 0x0001 test.txt
拡張属性を表示してみます。
エンコード方式を指定しないと、値が正しく表示されません。
[root@server test]# getfattr -n user.x1 test.txt
# file: test.txt
user.x1=0sAAE=
エンコード方式に16進数(hex
)を指定して、拡張属性を表示してみます。
拡張属性の値が0x0001であることがわかります。
[root@server test]# getfattr -n user.x1 -e hex test.txt
# file: test.txt
user.x1=0x0001
エンコード方式の指定にロングオプション(--encoding)を使ってみます。
拡張属性の値が0x0001であることがわかります。
[root@server test]# getfattr -n user.x1 --encoding hex test.txt
# file: test.txt
user.x1=0x0001
#6 スペースを含んだ文字列を拡張属性に設定する方法
スペースを含んだ文字列を拡張属性に設定すると、以下のようなエラーが発生します。
[root@server test]# setfattr -n user.x1 -v 111 222 test.txt
setfattr: 222: そのようなファイルやディレクトリはありません
拡張属性の値をダブルクォートで囲んで設定してみます。
エラーなく設定できることがわかります。
[root@server test]# setfattr -n user.x1 -v "111 222" test.txt
設定した拡張属性を表示してみます。
拡張属性が正しく設定されていることがわかります。
[root@server test]# getfattr -n user.x1 test.txt
# file: test.txt
user.x1="111 222"
#Z 参考情報
Linuxプログラミングインタフェース
改訂新版 徹底攻略 LPIC Level3 303 教科書+問題集
Ping-t