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


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

Linuxでは、ファイルのパーミッションを設定してもrootユーザーはすべてのファイルを操作できてしまいます。そこで使うのが chattr(change attribute)コマンドです。

この記事では、chattrコマンドの実践的な使い方を解説します。
ファイルの不変属性(immutable)の設定から、lsattrによる属性確認、サーバー運用での具体的な活用例まで、現場で必要になる操作を網羅しています。

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

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

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

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

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

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

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

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 属性は、ログの改ざん防止や監査ログの保護に有効です。

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

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

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

「-」は属性なしを意味します。ほとんどのファイルは e 以外は「-」の状態です。

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

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

サーバーの設定ファイル群に不変属性が設定されていないかまとめて確認したい場合に使います。

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. ディレクトリに+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属性のファイルを削除しようとしたとき

$ sudo rm /etc/resolv.conf rm: cannot remove '/etc/resolv.conf': Operation not permitted

まず chattr -i で属性を解除してから削除してください。「なぜか削除できない」と焦ったときは、まず lsattr で属性を確認することを習慣にしましょう。

【エラー3】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 -R ディレクトリ名


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

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

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

※登録30秒/合わなければ解除3秒


宮崎 智広

この記事を書いた人

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

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

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

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る