Linuxでは、ファイルやディレクトリのパーミッション(権限)を使ってアクセス制御を行いますが、それだけでは不十分な場合もあります。特に、誤ってファイルを削除してしまう、あるいは悪意あるスクリプトから大事なファイルを守りたいといったケースでは、さらに一歩踏み込んだ保護が求められます。
そんな時に役立つのが、chattr
(change attribute)コマンドです。このコマンドを使えば、ファイルの属性を変更して、削除や書き換えを禁止するなど、より強固な保護が可能になります。
この記事では、chattr
の基本から便利な使い方、解除方法までをわかりやすく解説します。Linuxユーザーならぜひ覚えておきたいテクニックです。
chattr
とは、Linuxにおいてファイルやディレクトリに「属性」を付け加えたり変更したりするコマンドです。通常のパーミッション(chmod
やchown
)では制御できない細かな挙動を制限できます。
たとえば、あるファイルに「i(immutable)」属性を付けると、そのファイルは削除も変更もできなくなります。rootユーザーですら一時的に変更できなくなるため、重要な設定ファイルなどの保護に役立ちます。
このように、chattr
はファイルに対して追加的な安全策を講じるための便利なツールです。
基本的な使い方は以下のとおりです。
chattr [オプション] [+/-/=][属性] ファイル名
+
:属性を追加する-
:属性を削除する=
:指定した属性だけを設定し、他の属性をクリアするたとえば、+i
を付けるとimmutable属性(変更不可)を追加します。
sudo chattr +i important.conf
このコマンドを実行すると、important.conf
は読み取りはできますが、書き込み・削除・名前変更などが一切できなくなります。
chattr
で使える属性はいくつかありますが、特によく使うのは以下の3つです。
属性 | 説明 |
---|---|
i | immutable:変更・削除・リネームが禁止される |
a | append only:追記のみ可能。上書きや削除はできない |
e | extents:ext4の拡張属性。通常は自動で設定される |
もっとも重要で使用頻度が高い属性です。設定するとファイルのあらゆる変更が禁止されます。
sudo chattr +i ファイル名
ログファイルなど、追記はしたいけれど過去の内容を消されたくない場合に便利です。
sudo chattr +a access.log
vi
やnano
などのエディタでは書き換えできなくなりますが、echo
やcat >>
を使った追記は可能です。
ファイルに付与された属性を確認するには、lsattr
コマンドを使います。
lsattr ファイル名
例:
lsattr important.conf
出力例:
----i--------e---- important.conf
このように、どの属性が設定されているかが一目で分かります。
誤って編集してしまうとシステムに影響が出るような設定ファイルには、+i
属性を使って保護するのがおすすめです。
sudo chattr +i /etc/ssh/sshd_config
編集が必要なときだけ属性を解除して、終わったら再設定する運用が安全です。
sudo chattr -i /etc/ssh/sshd_config
# 編集作業
sudo chattr +i /etc/ssh/sshd_config
セキュリティ上、ログは保管しておきたいけれど、消されてしまっては困る…というときに便利なのが+a
属性です。
sudo chattr +a /var/log/secure
この状態では、追記はできますが削除や編集は不可になります。
chattr
の属性操作にはroot権限が必要な場合があります。通常ユーザーでは変更できません。chattr
が使えないことがあります。ext4ファイルシステムでの利用が前提です。i
属性を設定すると、パーミッションの変更すらできなくなります。操作前に必ず確認をしましょう。rsync
やtar
のオプション)を使うのがおすすめです。lsattr
:属性確認用sudo
:root権限で実行するために必要alias
:よく使う属性変更を簡略化する例:
alias lock="sudo chattr +i"
alias unlock="sudo chattr -i"
これで、
lock important.txt
と打つだけでファイルを保護できます。
など、システム保守やセキュリティ対策において、chattr
は大いに力を発揮します。