【 setfattr 】コマンド――ファイルの拡張属性を設定/削除する:Linux基本コマンドTips(230)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ファイルの拡張属性を設定/削除する「setfattr」コマンドです。
本連載は、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) |
ファイルに拡張属性を設定する
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)
ファイルの拡張属性を削除する
「setfattr -x 名前空間識別子.拡張属性 ファイル名」で、ファイルから拡張属性を削除します(画面2)。拡張属性だけではなく、「user.test」のように名前空間識別子と一緒に指定する必要があります。
コマンド実行例
setfattr -x 名前空間識別子.拡張属性 ファイル名
(ファイルから拡張属性を削除する)
setfattr -x user.test test1.txt
(test1.txtから「user.test」という拡張属性を削除する)(画面2)
セキュリティコンテキストを削除する
SELinuxを有効にした環境でファイルを作成すると、自動でSELinuxのセキュリティコンテキストが設定されます。
セキュリティコンテキストを削除したい場合、SELinuxを無効にした上で、「setfattr -x security.selinux ファイル名」で削除します。実行にはroot権限が必要です。
SELinuxは、「setenforce」コマンドで一時的に無効化することができますが、この状態ではセキュリティコンテキストを削除することはできません。システムの設定ファイル(/etc/selinux/config、※5)の内容を「SELINUX=disabled」に書き換えて再起動すると、永続的に無効化できます。
なお、SELinuxの状態は「getenforce」コマンドで確認できます。
※5 シンボリックリンクは「/etc/sysconfig/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.