Dateien, die auf dem Linux-Server verschwinden

13

Ich habe 4 spezifische Dateien, die scheinbar immer wieder aus dem Home-Verzeichnis eines Benutzers verschwinden. Soweit wir wissen, gibt es keine Cronjobs oder andere automatisierte Aufgaben, die diese entfernen würden. Ich habe auditd auf sie eingerichtet, aber die Protokolle zeigen nicht wirklich etwas von Interesse. Ich kann sehen, dass unser Backup-Dienstprogramm jede Nacht auf sie zugreift, bis sie nicht mehr da sind, aber sonst nichts. Gibt es irgendetwas, das dazu führen würde, dass die Dateien entfernt werden, die um auditd herumkommen würden?

Die fraglichen Dateien sind:

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

sowie einige Dateien im .ssh-Verzeichnis dieses Benutzers. Kopien dieser Dateien, die in einem Unterordner namens "keepers" abgelegt sind, werden ebenfalls gleichzeitig gelöscht. Es hat nicht geholfen, die Berechtigungen für sie in 000 zu ändern und sie im Besitz von root zu haben.

Momentan muss ich inotifywait einrichten, um das Erstellen, Löschen und Verschieben dieses Unterordners zu protokollieren, damit hoffentlich etwas auftaucht, obwohl nicht viel protokolliert wird, abgesehen davon, wann es passiert ist, und nicht, was es verursacht hat.

Chad P
quelle
1
Bitte füge ihre Namen und Pfade zu deinem Beitrag hinzu, es könnte hilfreich sein.
Shadok
2
Auch das Posten von AuditD-Protokollen kann hilfreich sein.
Janne Pikkarainen
3
Sie können auch versuchen, die Dateien zu erstellen, deren Eigentümer root und chmod 000 sind, um zu prüfen, ob sie noch entfernt werden (oder ob dadurch etwas anderes beanstandet wird / ein Fehler auftritt).
Polynom
5
Zusätzlich zu chmod 0000 können Sie auch chattr + i verwenden, um zu verhindern, dass sogar root es entfernt
mer
1
Beachten Sie, dass chattr nur auf ext-Dateisystemen hilft. aber ein chattr sollte helfen. :-) Sie können auch SELINUX anstelle von chattr verwenden, um zu verhindern, dass diese Dateien geändert werden. aber meiner meinung nach muss die löschung von einem prozess oder benutzer kommen.
JMW

Antworten:

20

Lösung 1 : systemtap Mit systemtap
können Sie alle PIDs anzeigen, die versuchen, unlink () im Inode von .bashrcund .bash_profileDateien zu verwenden.

Installieren Sie systemtap und die Debugsymbole für Ihren Kernel.

Erstellen Sie eine Datei mit dem Namen unlink.stapmit dem folgenden Inhalt:

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

Dann starte es mit sudo stap unlink.stap

Lösung 2 : inotify
Sie können auch inotify verwenden, um zu sehen, wann die Datei gelöscht wird.

Lösung 3 : ftrace
Eine andere Lösung besteht darin, ftrace zu verwenden :

trace-cmd record -e \*unlink\*

Warten Sie, bis die Datei gelöscht wurde. Drücken Sie STRG + C, um den Vorgang abzubrechen. trace-cmd record ...Führen Sie dann Folgendes aus:

trace-cmd report

Lösung 4 : bpftrace
installieren bpftraceund dann ausführen:

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

Zusätzlich zur Antwort von micea können Sie die Dateien als root chatten und feststellen, ob beim Versuch, sie zu entfernen, ein Fehler aufgetreten ist.

Sirex
quelle
4

Sind Sie absolut sicher, dass der Benutzer sie nicht (versehentlich) löscht?

Ich hatte einige ahnungslose (Windows) Benutzer mit dem gleichen Problem. Es stellte sich heraus, dass sie diese Dateien jedes Mal selbst löschten, wenn sie mit einem FTP-Client ihr Home-Verzeichnis besuchten. Sie bemerkten die .xxxx-Dateien (der FTP-Client hat sie nicht versteckt) und beseitigten die "Unordnung".

Mir ist nie in den Sinn gekommen, dass sie es selbst gemacht haben, bis sich einer von ihnen über die spontan wieder auftauchenden Dateien beklagte, die er einige Tage zuvor gelöscht hatte.

Tonny
quelle
2
Glauben Sie mir, ich würde es lieben, so einfach zu sein.
Chad P
Das war lustig :)
Snap
3
Es ist jetzt lustig ... Nicht so sehr, als es passierte und ich konnte nicht herausfinden, was los war. @Chad P: Bitte lassen Sie uns wissen, was Sie finden. Ich finde das ziemlich neugierig.
Tonny
3

Wir verwenden Bash-Logout-Skripte (~ / .bash_logout), um bestimmte Dateien beim Abmelden zu bereinigen. Sie können überprüfen, ob Sie über dieses Setup verfügen, möglicherweise mit einem fett gefingerten Glob.

RAM
quelle
2

Mehr scheint wie ein Eindringling, der ein find / home / user -name filename -exec rm -f {} \; nach all seinem schleichen :). Nur erraten, weil Sie erwähnt haben, dass die Backup-Dateien auch gelöscht werden.

SparX
quelle
1

Um den Verlust der Dateien und ihres Inhalts zu verhindern, können Sie libtrash über LD_PRELOAD einrichten. Mit libtrash können Sie eine Reihe von Dingen erledigen, die für Sie jedoch interessant sein könnten

INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN

Guter Artikel über libtrash gefunden werden kann hier

Eine andere Sache, die Sie erwähnen, ist, dass Sie Dateien zum Root-Verzeichnis gehörten und diese trotzdem entfernt wurden. Dies liegt daran, dass / home / username username gehört. und wenn dir gesagt hat mod 755; dann jede Datei oder jedes Verzeichnis in diesem Verzeichnis, deren Eigentümer es ist, unabhängig davon, wer vom Benutzer entfernt werden kann; auch wenn es Roots-Datei oder dir ist. Grundsätzlich liegt es an der Tatsache, dass das Entfernen von Dateien in dir bedeutet, dass der Inhalt des Verzeichnisses geändert wird und der Benutzer 7 (in 755) von diesem Verzeichnis hat, damit er tun kann, was er will.

Es gibt Möglichkeiten, dies zu blockieren, da andere Personen bereits über chattr auf ext-Dateisystemen vorgeschlagen haben, Dateien als unveränderlich festzulegen (+ i). Dann müsste man das unveränderliche Flag deaktivieren, bevor man irgendwelche Änderungen an file / dir vornimmt, die das + i-Flag haben. Unveränderliches Flag / Chattr kann nur von root verwendet werden.

Hrvoje Špoljar
quelle