はじめに
Linux では、特定のファイルやディレクトリの属性は、特定のコマンドを使ってのみアクセスまたは変更できます。これらの属性により、root ユーザーであっても、削除や変更を防ぐなど、ファイル操作を制限できます。この機能は、重要なファイルやディレクトリを保護するのに特に役立ちます。
このガイドでは、2 つの重要なコマンドを取り上げます。
chattr:ファイル属性を設定または解除するために使用します。lsattr:ファイル属性を表示するために使用します。
これらのコマンドは、 ext2、 ext3、 ext4 ファイルシステムで一般的に使用され、システム管理者にとって重要なツールです。
「 chattr 」コマンドとは?
「 chattr 」コマンドを使うと、Linux ファイルシステム上のファイル属性を変更できます。シンボリックモードを使って、特定の属性を追加、削除、設定します。これらの属性により、ファイルを不変にしたり、追加のみにしたりするなど、ファイルの動作を制御できます。
「 chattr」の主な機能:
- ファイルを誤った削除や変更から保護します。
- root ユーザーに対してもファイル操作を制限します。
- 高度なファイル管理とセキュリティを有効にします。
公式ドキュメント: chattr
詳細については、公式の chattr ドキュメントを参照してください。
Linux Man Pages – chattr
「 lsattr 」コマンドとは?
「 lsattr 」コマンドは、 ext2、 ext3、または ext4 ファイルシステム上のファイルとディレクトリの属性を一覧表示します。ファイルアクセスの問題に遭遇したときのトラブルシューティングに特に役立ちます。
「 lsattr」の主な機能:
- ファイル属性を読みやすい形式で表示します。
- ファイル属性が原因のアクセスや変更の問題をトラブルシューティングします。
公式ドキュメント: lsattr
詳細については、公式の lsattr ドキュメントを参照してください。
Linux Man Pages – lsattr
コマンドの構文
chattr コマンドの構文
chattr [ -RVf ] [ -v version ] [ -p project ] [ + | - | = [attributes] ] files...
説明:
-R:ディレクトリとその内容の属性を再帰的に変更します。-V:詳細な出力とプログラムのバージョンを表示します。-f:ほとんどのエラーメッセージを表示しません。-v version:ファイルのバージョン/世代番号を設定します。-p project:ファイルのプロジェクト番号を設定します。+:指定した属性を追加します。-:指定した属性を削除します。=:属性を指定どおりに正確に設定します。attributes:属性フラグの組み合わせ(例:i、aなど)。files...:対象のファイルまたはディレクトリ。
例:
- 不変属性を追加する:
chattr +i filename - 追加のみ属性を削除する:
chattr -a filename - 属性を正確に設定する(例:不変と追加のみ):
chattr =ia filename
lsattr コマンドの構文
lsattr [ -RVadlpv ] [ files... ]
説明:
-R:ディレクトリとその内容の属性を再帰的に一覧表示します。-V:プログラムのバージョンを表示します。-a:隠しファイルを含むすべてのファイルを一覧表示します(.で始まるもの)。-d:内容を一覧表示するのではなく、ディレクトリを通常のファイルのように一覧表示します。-l:1 文字の略語ではなく、長い名前を使ってオプションを出力します。-p:ファイルのプロジェクト番号を一覧表示します。-v:ファイルのバージョン/世代番号を一覧表示します。files...:対象のファイルまたはディレクトリ。
例:
- ファイルの属性を表示する:
lsattr filename - ディレクトリ内のすべてのファイルの属性を表示する:
lsattr /path/to/directory
一般的なファイル属性とそのフラグ
次の表は、最も一般的なファイル属性とその意味をまとめたものです。
| 属性 | フラグ | 説明 |
|---|---|---|
| 追加のみ | a | ファイルは書き込みのために追加モードでのみ開くことができます。 |
| 不変 | i | ファイルを変更、削除、名前変更することはできません。 |
| atime なし | A | ファイルのアクセス時刻(atime)は、ディスク I/O を減らすために更新されません。 |
| ダンプなし | d | ファイルは、 dump プログラムを使ったバックアップから除外されます。 |
| データジャーナリング | j | ファイルデータは、ファイル自体に書き込まれる前にジャーナルに書き込まれます。 |
| 同期的更新 | S | ファイルへの更新は、ディスクに同期的に書き込まれます。 |
| 削除不可 | u | ファイルが削除されると、そのデータは回復の可能性のために保存されます。 |
属性の完全なリストについては、 chattr の man ページを参照してください。
Linux Man Pages – chattr
次のコマンドによるトラブルシューティング: chattr と lsattr
問題:ファイルを修正または削除できない
次のようなエラーに遭遇した場合:
E212: Can't open file for writing
次の手順に従います。
- ファイルの権限を確認する
次のコマンドを使ってファイルの権限を確認します。ls -l filename - ファイルの属性を確認する
コマンドlsattrを使って、変更を制限する可能性のある属性があるかどうかを確認します。lsattr filename - 制限的な属性を削除する
ファイルにi属性(不変)またはa属性(追加のみ)がある場合は、chattrコマンドで削除します。chattr -i filename chattr -a filename - 変更を確認する
コマンドlsattrを再実行して、属性が削除されたことを確認します。lsattr filename
実践例: a 属性
シナリオ:
修正または名前変更できないファイル: /etc/ssh/known_hostsです。
解決手順:
- ファイルの属性を確認します。
lsattr /etc/ssh/known_hosts - 次の
a属性が設定されている場合は、削除します。chattr -a /etc/ssh/known_hosts - 属性が削除されたことを確認します。
lsattr /etc/ssh/known_hosts - これでファイルを保存または名前変更できるはずです。
まとめ
「 chattr と lsattr 」コマンドは、Linux でファイル属性を管理するための非常に貴重なツールです。重要なファイルやディレクトリにさらなる保護層を提供し、システム管理者にとって不可欠です。設定ファイルを保護する場合でも、ファイルアクセスの問題をトラブルシューティングする場合でも、これらのコマンドを習得することで Linux の専門知識が向上します。