0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

拡張属性の設定、削除方法

Last updated at Posted at 2021-03-08

#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上の仮想マシンを使いました。
仮想マシンの版数は以下のとりです。

CentOSの版数
[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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?