連載
» 2018年08月09日 05時00分 公開

Linux基本コマンドTips(230):【 setfattr 】コマンド――ファイルの拡張属性を設定/削除する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ファイルの拡張属性を設定/削除する「setfattr」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はファイルに拡張属性を設定/削除する「setfattr」コマンドです。

setfattrコマンドとは?

 「setfattr」(set file attribute)は、ファイルの拡張属性を設定したり、削除したりするコマンドです(※1)。

 ファイルには、所有者やタイムスタンプ、パーミッションなどの属性があります。Linuxに限らず、さまざまなファイルシステムが共通に備える属性です。

 これに対し、ユーザーが自由に追加できる属性を拡張属性(extended attribute)と呼びます。Linux環境で最もなじみ深い拡張属性は恐らくSELinuxのセキュリティコンテキストでしょう(※2)。

 なお、ファイルの拡張属性を表示するにはgetfattrコマンド(連載第229回)を使います。

※1 setfattrコマンドはattrパッケージに含まれている。Ubuntu 18.04 LTSのようにattrパッケージをデフォルトで含んでいない場合は、aptコマンド(第139回)を用いて「sudo apt install attr」としてパッケージを導入する。
※2 SELinux(Security-Enhanced Linux)とは、強制アクセス制御(Mandatory Access Control)を加えたLinuxのカーネルモジュールとその機能をいう。SELinuxを有効にすると、通常のファイルシステムよりも高度なアクセス制御機能を使用できる。lsコマンドでSELinuxのセキュリティコンテキストを表示するには「-Z」オプションを使用する。





setfattrコマンドの書式

setfattr -n 名前 [オプション] ファイル

setfattr -x 名前 [オプション] ファイル

※[ ]は省略可能な引数を示しています





setfattrの主なオプション

短いオプション 長いオプション 意味
-n 名前 --name=名前 指定した「名前空間識別子.拡張属性」の拡張属性を設定する(※3)
-x 名前 --remove=名前 指定した「名前空間識別子.拡張属性」の拡張属性を削除する(※3)
-v 値 --value=値 拡張属性の値を設定する(-nとともに使用)
-h --no-dereference シンボリックリンクをたどらない
--restore=ファイル ファイルから読み込んだ拡張属性を設定する(※4)

※3 名前空間識別子については本文を参照
※4 ファイルのフォーマットは「getfattr -d」の出力と同じで、「名前=値」の組み合わせからなる。ファイル名を「-」にすると標準入力から読み込む。





ファイルに拡張属性を設定する

 Linuxでは拡張属性の管理のために名前空間を使っています。それぞれの名前空間を区別する名前を名前空間識別子と呼び、以下のような名前空間識別子があります。

名前空間識別子 用途
system カーネルが使用
security 主にSELinuxが使用
trusted 信頼されるプロセスが使用
user ユーザー用(自由に定義して使用できる)

 「setfattr -n 名前空間識別子.拡張属性の名前 ファイル名」で、ファイルに拡張属性を設定します。拡張属性の値も一緒に設定したい場合は「setfattr -n 名前空間識別子.拡張属性の名前 -v 値 ファイル名」とします(画面1)。

 ユーザーが独自に指定する拡張属性は「user」を使用します。

 設定した内容は、「getfattr」コマンド(第229回)で確認できます。

コマンド実行例

setfattr -n 名前空間識別子.拡張属性 ファイル名

(ファイルに拡張属性を設定する)

setfattr -n 名前空間識別子.拡張属性 -v 値 ファイル名

(ファイルに拡張属性と値を設定する)

setfattr -n user.test -v value0 test1.txt

(test1.txtに「user.test=value0」という拡張属性を設定する)(画面1


画面1 画面1 ファイルに拡張属性を設定後、設定状況を表示したところ


ファイルの拡張属性を削除する

 「setfattr -x 名前空間識別子.拡張属性 ファイル名」で、ファイルから拡張属性を削除します(画面2)。拡張属性だけではなく、「user.test」のように名前空間識別子と一緒に指定する必要があります。

コマンド実行例

setfattr -x 名前空間識別子.拡張属性 ファイル名

(ファイルから拡張属性を削除する)

setfattr -x user.test test1.txt

(test1.txtから「user.test」という拡張属性を削除する)(画面2


画面2 画面2 ファイルの拡張属性を削除したところ


セキュリティコンテキストを削除する

 SELinuxを有効にした環境でファイルを作成すると、自動でSELinuxのセキュリティコンテキストが設定されます。

 セキュリティコンテキストを削除したい場合、SELinuxを無効にした上で、「setfattr -x security.selinux ファイル名」で削除します。実行にはroot権限が必要です。

 SELinuxは、「setenforce」コマンドで一時的に無効化することができますが、この状態ではセキュリティコンテキストを削除することはできません。システムの設定ファイル(/etc/selinux/config、※5)の内容を「SELINUX=disabled」に書き換えて再起動すると、永続的に無効化できます。

 なお、SELinuxの状態は「getenforce」コマンドで確認できます。

※5 シンボリックリンクは「/etc/sysconfig/selinux」にある。



画面3 画面3 SELinuxのセキュリティコンテクストを削除したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。