Linuxサーバーでファイルが消える


13

ユーザーのホームディレクトリから消え続ける4つの特定のファイルがあります。私たちが知る限り、それらを削除するcronjobやその他の自動化されたタスクはありません。私はそれらを監査するようにセットアップしましたが、ログには実際には何も興味がありません。バックアップユーティリティが毎晩アクセスするのを見ることができます。それらのファイルが削除される原因となって監査を回避できるものはありますか?

問題のファイルは次のとおりです。

/home/username/.bashrc
/home/username/.bash_profile

そのユーザーの.sshディレクトリにあるいくつかのファイルも同様です。「キーパー」と呼ばれるサブフォルダーに配置されたこれらのファイルのコピーも同時に削除されます。それらのアクセス許可を000に変更し、それらをrootが所有していることは役に立ちませんでした。

私は現在、そのサブフォルダの作成、削除、移動をログに記録するinotifywaitセットアップを持っているので、何かが起こることを願っていますが、それが起こった原因ではなく、それが起こったとき以外はあまり記録しません。


1
投稿に名前とパスを追加してください。役立つ場合があります。
シャドック

2
また、監査ログを投稿することも役立ちます。
ジャンヌピッカライネン

3
また、rootおよびchmod 000として所有されているファイルを作成して、それらがまだ削除されているかどうかを確認することもできます(または、それにより他のエラーまたはエラーが発生する場合)。
多項式

5
chmod 0000に加えて、chattr + iを試して、rootでさえ削除されないようにすることができます
mer

1
chattrはextファイルシステムに役立つだけであることに注意してください。しかし、chatrtrが役立つはずです。:-) chattrの代わりにSELINUXを使用して、これらのファイルの変更を停止することもできます。しかし、削除はプロセスまたはユーザーからのものでなければなりません。
-JMW

回答:


20

解決策1:SystemTapの
あなたが使用することができますSystemTapのを使用しようとしているすべてのPIDを示すために)(リンク解除のiノード上 .bashrcおよび.bash_profileファイルを。

カーネルのsystemtapとデバッグシンボルをインストールします。

unlink.stap次の内容の名前を持つファイルを作成します。

probe syscall.unlink
{
    printf ("%s(%d) unlink (%s) userID(%d)\n", execname(), pid(), argstr, uid())
}

次に、それを実行します sudo stap unlink.stap

解決策2:inotify
また、inotifyを使用して、ファイルがいつ削除されたかを確認することもできます。

解決策3:ftrace
別の解決策はftraceを使用することです

trace-cmd record -e \*unlink\*

ファイルが削除されるのを待ち、CTRL + Cを押して停止しtrace-cmd record ...、実行します:

trace-cmd report

解決策4:bpftrace
をインストールbpftraceしてから実行します:

bpftrace -e 'tracepoint:syscalls:sys_enter_unlink* { printf("%s %s\n", comm, str(args->pathname)); }'

5

miceaの答えに加えて、rootとしてファイルをchattr + iし、それらを削除しようとしたときに何かエラーが記録されるかどうかを確認できます。


4

ユーザー自身が(誤って)それらを削除していないことを絶対に確信していますか?

同じ問題を抱える無知な(Windows)ユーザーもいました。ftpクライアントを使用してhome-dirにアクセスするたびに、これらのファイル自体を削除したことが判明しました。彼らは.xxxxファイルに気づき(ftpクライアントはそれらを隠しませんでした)、「クラッター」を削除しました。

数日前に削除したファイルが自発的に再表示されることについて不平を言うまで、彼らは自分自身でそれをしたことはありませんでした。


2
私を信じて、私はそれがこのように簡単であることが大好きです。
チャドP

これは面白かったです:)
スナップ

3
それは今おかしい…。@Chad P:見つけたことをお知らせください。これは非常に興味深いものです。
トニー

3

bashログアウトスクリプト(〜/ .bash_logout)を使用して、ログアウト時に特定のファイルをクリーンアップします。その設定があるかどうかを確認することができます。


2

侵入者のように思われます。/home/user-name filename -exec rm -f {} \; 結局彼のこっそり:)。バックアップファイルも削除されていると述べたので、推測してください。


1

ファイルとその内容が失われないようにするには、LD_PRELOADを介してlibtrashをセットアップします。libtrashを使用すると、多くのことを実行できますが、興味深いのは、

INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN

libtrashに関する良い記事はここにあります

あなたが言及した他のことは、あなたがルートにファイルをchownし、それらがまだ削除されたことです。これは、/ home / usernameがユーザー名によって所有されているためです。そして、dirがmod 755と言う場合; 次に、ユーザーが誰を削除できるかに関係なく、そのディレクトリ内の任意のファイルまたはディレクトリ。たとえrootsファイルまたはdirであっても。これは、基本的に、dir内のファイルを削除すると、dirの内容が変更され、ユーザーがそのディレクトリを7つ(755で)持っているため、好きなことを行えるようになるためです。

他の人々がextファイルシステム上のchattrを介してすでにファイルを不変(+ i)に設定するよう提案しているように、これをブロックする方法があります。次に、+ iフラグを持つfile / dirに変更を加える前に、不変フラグを設定解除する必要があります。不変フラグ/ chattrは、rootでのみ使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.