web-dev-qa-db-ja.com

このファイルをrootとして削除できないのはなぜですか?

2つのファイルを含むディレクトリ試験があります。ファイルを削除する必要がありますが、アクセスが拒否されました。でもrm -rfコマンドはこれらのファイルを削除できません。 rootユーザーとしてログインしました。

enter image description here

22
user117441

Rootユーザーからファイルの属性を確認する

# lsattr 

i(不変)またはa(追加のみ)に気付いた場合は、それらの属性を削除します。

# man chattr
# chattr -i [filename]
# chattr -a [filename]
39
Invoker

ファイルを削除する権限がないとrmが不平を言う最も一般的な理由は、ディレクトリの権限がファイルの削除を禁止していることです。ファイルを削除するには、ディレクトリへの書き込み権限が必要です。ファイルのアクセス許可は関係ありません(-fなしのrmは、読み取り専用ファイルを削除する前に確認を求めますが、これは確認であり、制限ではありません)。 OSX(Linux以外)などの一部のUnixバリアントでは、ファイルの [〜#〜] acl [〜#〜] を使用すると、ファイルが削除されない場合があります。ファイルにACLエントリがあった場合、ls -lは権限フィールドの末尾に@を表示します。

Rootとしてのアクセスはアクセス許可をバイパスするため、rootは読み取り専用ディレクトリ内でもファイルを削除できます。

ls -lからの出力は、許可列の最後に.を示しています。これは、ファイルにSELinuxセキュリティコンテキストがあることを示します。基本的なアクセス許可やACLとは異なり、ファイルのSELinuxセキュリティコンテキストは、ファイルの削除を許可するユーザーを制御できます。さらに、SELinuxは常にrootによってバイパスされるとは限りません(プロセスをユーザーID 0として実行することは可能ですが、SELinuxポリシー設計者が選択した数の権限で実行できます)。 SELinuxコンテキストで何ができるかを確認するには、ls -lZ . exam_aを実行します。

ファイルが削除されないようにするもう1つの方法は、ファイルまたはそのファイルを含むディレクトリに追記専用または不変 Linux属性 があるかどうかです。 Linuxの属性を表示するには、lsattr -d . exam_aを実行します。 aまたはi属性がオンになっている場合は、ファイルを削除するために属性(chattr -a -i . exam_a)を削除する必要があります。 rootだけがそれを行うことができます。ルートはこれらの属性をバイパスしてファイルを削除することはできません。最初に属性をオフにする必要があります。

ファイルが削除されないようにするもう1つの理由は、ファイルシステムが読み取り専用でマウントされている場合ですが、その場合は別のエラーメッセージが表示されます。