chattrコマンドでファイルを変更不可にする方法|lsattrで属性確認と実務活用も

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > chattrコマンドでファイルを変更不可にする方法|lsattrで属性確認と実務活用も
「設定ファイルをrootでも書き換えられないようにしたい…」
「chmodで権限を絞っても、rootユーザーには効かなくて困っている…」

Linuxでは、ファイルのパーミッションを設定してもrootユーザーはすべてのファイルを操作できてしまいます。
また「rm -f で削除したのに消えない」「rootで上書きしようとしてもOperation not permittedになる」という経験はないでしょうか。この原因の多くはパーミッションではなく、ファイルシステムレベルの拡張属性にあります。

そこで使うのが chattr(change attribute)コマンドと、設定済み属性を確認する lsattr コマンドです。RHEL 9 / Rocky Linux 9 / Ubuntu 24.04 LTS で動作確認済みです。

この記事では、chattrコマンドの実践的な使い方を解説します。
ファイルの不変属性(immutable)の設定から、lsattrによる属性確認、サーバー運用での具体的な活用例まで、現場で必要になる操作を網羅しています。
【この記事でわかること】
・chattrコマンドとchmodの違い(rootユーザーへの制限方法)
chattr +i でファイルをrootでも変更・削除できないimmutable状態にする方法
chattr +a で追記のみ許可する方法(ログファイルの保護に有効)
・設定できる属性フラグの種類と意味(i・a・e・s・A など8種類)
lsattr コマンドで設定済み属性を確認する方法
・/etc/resolv.confの自動書き換え防止・セキュリティ強化など、実務での活用パターン
・「rm -fでも消えない」「viで保存できない」トラブルの解決手順

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜchattrコマンドが必要なのか?

通常のLinuxパーミッション(chmod)は、「誰がアクセスできるか」を制御する仕組みです。
しかしrootユーザーはパーミッションに縛られないため、重要な設定ファイルでも上書き・削除ができてしまいます。

chattrコマンドは、ext2/ext3/ext4などのファイルシステムが持つ「拡張属性」を操作します。
この拡張属性を使うと、rootユーザーであっても変更できない「不変(immutable)」な状態にできます。

chmod:アクセス権限(読み・書き・実行)を制御する。rootには効かない
chattr +i:ファイルシステムレベルで変更を禁止する。rootでも書き換え・削除不可になる

特にサーバー上の重要な設定ファイル(/etc/resolv.conf、/etc/hostsなど)を誤操作から守りたい場面や、
セキュリティ上の理由でファイルの改ざんを防ぎたい場面で力を発揮します。

chattr・lsattr コマンドは e2fsprogs パッケージに含まれており、RHEL/Rocky Linux/Ubuntu では標準インストール済みです。

ファイル属性フラグの一覧

chattr で設定できる主なフラグを以下にまとめます。

フラグ 意味 主な用途
i immutable(不変):削除・変更・リネーム・リンク作成を禁止。rootも不可 重要設定ファイルの保護
a append only(追記専用):追記は許可、上書き・削除を禁止 ログファイルの改ざん防止
e extent format:ファイルシステムがextentを使用中(通常は自動設定) 情報確認のみ
s secure deletion:削除時にブロックをゼロで上書き 機密ファイルの完全削除
u undeletable:削除後も内容を保持(復元可能にする) 誤削除への備え(実装依存)
A no atime update:アクセス時刻(atime)を更新しない I/O負荷軽減
S synchronous update:変更を即座にディスクへ書き込む クラッシュ耐性が必要なファイル
d no dump:dump コマンドのバックアップ対象から除外 バックアップ除外
実務でよく使うのは i(不変)と a(追記専用)の2つです。それ以外はカーネルやファイルシステムのバージョンによって挙動が異なる場合があるため、本記事では i と a を中心に解説します。

chattrコマンドの基本的な使い方

コマンド書式

chattr コマンドの基本書式は以下のとおりです。「+」でフラグを追加し、「-」で解除します。

# 書式 chattr [オプション] [+/-フラグ] ファイル名 # フラグを追加する chattr +i /etc/hosts # フラグを解除する chattr -i /etc/hosts # 複数フラグを同時に指定する chattr +ia /var/log/myapp.log # ディレクトリ配下を再帰的に処理する(-Rオプション) chattr -R +i /etc/myconf.d/

1. ファイルに不変属性(+i)を設定する

最もよく使うのが、+i オプションによる「immutable(不変)」属性の設定です。

# ファイルをimmutable(変更不可)にする $ sudo chattr +i /etc/resolv.conf # 確認 $ lsattr /etc/resolv.conf ----i---------e-- /etc/resolv.conf

+i 属性を付けたファイルに対しては、以下の操作がrootでもできなくなります。

書き込み(上書き):vim・echoでの変更が拒否される
削除:rm コマンドが「Operation not permitted」を返す
リネーム:mv コマンドが拒否される
ハードリンク作成:ln コマンドが拒否される

2. 不変属性を解除する(-i)

設定ファイルを更新したいときは、まず -i で属性を解除してから変更します。

# immutable属性を解除する(rootまたはsudo権限が必要) $ sudo chattr -i /etc/resolv.conf # 解除後は通常の編集が可能になる $ sudo vi /etc/resolv.conf

属性の変更には root 権限(または sudo)が必要です。
一般ユーザーが chattr を実行しようとすると「Operation not permitted」エラーになります。

3. 追記のみ許可する属性(+a)

ログファイルなど、追記は許可したいが上書き・削除はさせたくないファイルには +a(append only)属性が便利です。

# 追記のみ許可する(上書き・削除不可) $ sudo chattr +a /var/log/myapp.log # 追記はできる(>>) $ echo "ログ追記テスト" >> /var/log/myapp.log # 上書きはできない(>) $ echo "上書きテスト" > /var/log/myapp.log -bash: /var/log/myapp.log: Operation not permitted

+a 属性は、ログの改ざん防止や監査ログの保護に有効です。

4. logrotateとの組み合わせ注意点

+a フラグが設定されたファイルは、logrotate が「古いログを移動・削除する」操作に失敗します。
logrotate を使う場合は、事前フラグ解除と事後再設定を設定ファイルに組み込む必要があります。

# /etc/logrotate.d/myapp の設定例(prerotate/postrotate でフラグを制御) /var/log/myapp/access.log { daily rotate 30 compress prerotate chattr -a /var/log/myapp/access.log endscript postrotate chattr +a /var/log/myapp/access.log endscript }

lsattrで属性を確認する方法

設定した属性を確認するには lsattr コマンドを使います。

1. ファイルの属性を確認する

# ファイルの属性を表示する $ lsattr /etc/resolv.conf ----i---------e-- /etc/resolv.conf # ディレクトリ内のファイルをまとめて確認する $ lsattr /etc/ -------------e-- /etc/fstab ----i---------e-- /etc/resolv.conf -------------e-- /etc/hosts # ディレクトリそのものの属性を確認する(-dオプション) $ lsattr -d /etc/myconf.d/ --------------e-- /etc/myconf.d/

出力の各文字が拡張属性を表しています。代表的な属性の意味は以下のとおりです。

i:immutable(変更・削除・リネーム禁止)
a:append only(追記のみ許可。上書き・削除禁止)
e:extent(extentsでマッピングされている。デフォルトで付いている)
A:no atime update(アクセス時刻を更新しない)

「-」は属性なしを意味します。フラグが設定されているかどうかは、その位置に文字があるかハイフンかで判断します。ほとんどのファイルは e 以外は「-」の状態です。

2. ディレクトリを再帰的に確認する(-R)

# ディレクトリ配下を再帰的に確認する $ lsattr -R /etc/httpd/conf/

サーバーの設定ファイル群に不変属性が設定されていないかまとめて確認したい場合に使います。
ディレクトリ自体の属性を確認する場合は -d オプションを使ってください(-d なしだとディレクトリ内のファイル一覧が表示されます)。

chattrの実務での活用例

1. /etc/resolv.confが自動で書き換えられる問題への対策

NetworkManager や dhclient が実行されると /etc/resolv.conf が自動で上書きされてしまうことがあります。
手動で設定した内容を保持したい場合は +i 属性が有効です。

# 手動でDNSを設定した後に不変属性を付ける $ sudo vi /etc/resolv.conf $ sudo chattr +i /etc/resolv.conf # NetworkManagerが書き換えようとしても弾かれる $ lsattr /etc/resolv.conf ----i---------e-- /etc/resolv.conf

ただし、NetworkManagerを使ってDNSを管理したい場合はこの方法は使えません。
その場合は nmcli で DNS設定を行ってください。

2. cronやsshの設定ファイルを誤操作から守る

本番サーバーで重要な設定ファイルを変更禁止にしておくことで、オペレーションミスのリスクを下げられます。

# SSH設定ファイルを変更不可にする $ sudo chattr +i /etc/ssh/sshd_config # 変更が必要な時は一時的に解除 → 変更 → 再設定 $ sudo chattr -i /etc/ssh/sshd_config $ sudo vi /etc/ssh/sshd_config $ sudo systemctl restart sshd $ sudo chattr +i /etc/ssh/sshd_config

変更が必要な際は「解除→変更→再設定」の手順を踏む運用ルールにしておくと、不用意な上書きを防げます。

3. セキュリティ強化(重要なシステムファイルの改ざん防止)

サーバーへの不正侵入者が /etc/passwd や /etc/shadow を改ざんするのを防ぐ目的でも使われます。

# パスワードファイルを保護する(必要時のみ解除する運用) $ sudo chattr +i /etc/passwd $ sudo chattr +i /etc/shadow $ sudo chattr +i /etc/group # 設定確認 $ lsattr /etc/passwd /etc/shadow /etc/group ----i---------e-- /etc/passwd ----i---------e-- /etc/shadow ----i---------e-- /etc/group

注意点として、useradd や passwd などのユーザー管理コマンドも /etc/passwd を書き込めなくなります。
メンテナンス時はフラグを一時解除する手順を必ず文書化しておきましょう。

4. Webサーバーの静的ファイルをデプロイ後に保護する

Webアプリの静的ファイルをデプロイ後、ファイルが勝手に変更されないよう保護する例です。

# デプロイ後に静的ファイルを不変に設定する $ sudo chattr -R +i /var/www/html/static/ # デプロイ更新時は一旦解除する $ sudo chattr -R -i /var/www/html/static/

5. ディレクトリに+iを設定した場合の注意点

ファイルだけでなく、ディレクトリ自体にも +i を設定できます。
ただし、ディレクトリへの +i はディレクトリ内のファイル操作(作成・削除)を禁止しますが、ディレクトリ内の既存ファイルの内容変更までは禁止しません。

# ディレクトリに+iを設定する $ sudo chattr +i /var/www/html/ # ディレクトリ内でのファイル作成が拒否される $ sudo touch /var/www/html/newfile.html touch: cannot touch '/var/www/html/newfile.html': Operation not permitted # 既存ファイルへの書き込みは(そのファイルに+iがなければ)可能 $ echo "test" >> /var/www/html/index.html # これは通る

ディレクトリ全体を完全に保護したい場合は、ディレクトリと配下のファイル全てに +i を設定する必要があります。

「Operation not permitted」が出た時の対処法

【エラー1】chattrコマンド自体が拒否される

$ chattr +i /etc/hosts chattr: Operation not permitted while setting flags on /etc/hosts

root権限が必要です。sudo を付けて実行してください。

【エラー2】+i属性のファイルを削除・編集できない

「rm -f でも消えない」「rootでも上書きできない」場合の確認手順です。

# Step 1: 属性フラグを確認する(まずここを見る) $ lsattr /etc/resolv.conf ----i---------e-- /etc/resolv.conf # ↑ i フラグが設定されているので削除・上書きができない # Step 2: フラグを解除する $ sudo chattr -i /etc/resolv.conf # Step 3: 削除・編集できることを確認する $ sudo rm /etc/resolv.conf

「なぜか削除できない」と焦ったときは、まず lsattr で属性を確認することを習慣にしましょう。

【エラー3】viで保存できない(E212 / Operation not permitted)

vi / vim でファイルを開き、編集後に :wq で保存しようとしてエラーになる場合:

E45: 'readonly' option is set → vi が readonly モードで開かれた(:set noreadonly で解除可)
E212: Can't open file for writing または Operation not permitted → chattr の +i 属性が原因の可能性が高い

# vi で保存エラーが出た場合の確認手順 $ lsattr /path/to/file ----i---------e-- /path/to/file # i フラグがあれば chattr -i で解除してから再編集する $ sudo chattr -i /path/to/file $ sudo vi /path/to/file

【エラー4】XFS・tmpfsファイルシステムでは使えない属性がある

chattr の +i 属性は ext2/ext3/ext4 での利用が主です。
XFSファイルシステムでは一部の属性がサポートされていません(+iはXFSでも動作しますが、属性によっては未対応のものがあります)。
また、tmpfs(/tmp など)では chattr は使えません。

# ファイルシステムの種類を確認する $ df -T /etc/resolv.conf Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda1 ext4 20511312 8234452 11224604 43% /

本記事のまとめ

やりたいこと コマンド
ファイルを変更・削除不可にする sudo chattr +i ファイル名
変更不可属性を解除する sudo chattr -i ファイル名
追記のみ許可する sudo chattr +a ファイル名
追記のみ属性を解除する sudo chattr -a ファイル名
ファイルの属性を確認する lsattr ファイル名
ディレクトリ自体の属性を確認する lsattr -d ディレクトリ名
ディレクトリ内を再帰的に確認する lsattr -R ディレクトリ名
ディレクトリ配下に再帰的にフラグ設定 sudo chattr -R +i ディレクトリ名

「rootでも変更できないファイル保護を、サーバー構築の"型"として身につけたい」と思いませんか?

chattrによるファイル保護は、本番サーバーの誤操作・改ざん防止に欠かせないテクニックです。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。