Ich habe ein Problem beim Entfernen des leeren Verzeichnisses. Strace zeigt einen Fehler an:
rmdir("empty_dir") = -1 ENOTEMPTY (Directory not empty)
Und ls -la empty_dir
zeigt nichts. Also habe ich mich mit debugfs mit dem fs (ext4) verbunden und sehe die versteckte Datei in diesem Verzeichnis:
# ls -lia empty_dir/
total 8
44574010 drwxr-xr-x 2 2686 2681 4096 Jan 13 17:59 .
44573990 drwxr-xr-x 3 2686 2681 4096 Jan 13 18:36 ..
debugfs: ls empty_dir
44574010 (12) . 44573990 (316) ..
26808797 (3768) _-----------------------------------------------------------.jpg
Warum könnte das passieren? Und eine Chance, dieses Problem zu lösen, ohne die Fs abzunehmen und vollständig zu überprüfen?
Zusätzliche Information:
Die "versteckte" Datei ist nur eine normale JPG-Datei und kann vom Bildbetrachter geöffnet werden:
debugfs: dump empty_dir/_-----------------------------------------------------------.jpg /root/hidden_file
# file /root/hidden_file
/root/hidden_file: JPEG image data, JFIF standard 1.02
rm -rf empty_dir
funktioniert nicht mit dem gleichen Fehler:
unlinkat(AT_FDCWD, "empty_dir", AT_REMOVEDIR) = -1 ENOTEMPTY (Directory not empty)
find empty_dir/ -inum 26808797
zeigt nichts.
rm -rf thatdirectory
meiste Zeit versucht Job. Andernfalls besteht die letzte Methode darin, die Datei von ihrer Inode-Nummer zu löschen.find . -inum [inode-number] -exec rm -i {} \;
zum BeispielAntworten:
Ich spannte mich an
ls
und bekam mehr Informationen zum Graben (gestrippte unwichtige Systemaufrufe):Hmm, wir sehen, dass syscall
getdents
korrekt funktioniert und alle 3 Einträge ('.', '..' und '_--- *') zurückgegeben hat, aberls
nur '.' Geschrieben hat . und '..'. Dies bedeutet, dass wir ein Problem mit dem Wrapper haben, umgetdents
den Coreutils verwendet wird. Und Coreutils verwendenreaddir
Glibc Wrapper fürgetdents
. Auch zu beweisen , dass es keine Probleme mitgetdents
i wenig prog aus Beispiel Abschnitt getdents' getestet Mann - Seite. Dieser Prog zeigte alle Dateien.Vielleicht haben wir gerade einen Fehler im Glibc gefunden? Also habe ich das glibc-Paket auf die letzte Version in meiner Distribution aktualisiert, aber kein gutes Ergebnis erzielt. Außerdem habe ich in Bugzilla keine entsprechenden Informationen gefunden.
Gehen wir also tiefer:
Warte was? libncom.so.4.0.1? Keine libc? Ja, wir sehen nur eine böswillige gemeinsam genutzte Bibliothek mit libc-Funktionen zum Ausblenden böswilliger Aktivitäten:
Entfernen von Rootkit-Dateien, Überprüfen aller
rpm -Va
Paketdateien ( in meinem Fall), Autostart-Skripte, Preload / Prelink-Konfigurationen, Systemdateien (find /
+rpm -qf
in meinem Fall), Ändern betroffener Kennwörter, Suchen und Beenden von Rootkit-Prozessen:Am Ende vollständige Systemaktualisierung, Neustart und Problem behoben. Grund für das erfolgreiche Hacken: ipmi-Schnittstelle mit sehr alter Firmware, die plötzlich über das öffentliche Netzwerk verfügbar war.
quelle
ps -p
für jede pid verwendet zur Erkennung unsichtbarer Prozesse). Hacker haben böswilliges libproc-3.2.8.so kompiliert und in / lib / dir gefunden (libproc-3.2.8.so der Distribution befand sich in / lib64, aber / lib dir in dieser Distribution hat mehr Priorität, wenn gemeinsam genutzte Bibliotheken geladen werden). Mit gehacktem ipmi ist es möglich, den Server neu zu starten. Neustart -> grub -> init = / bin / bash -> Backdoor erstellen -> Neustart des normalen Systems erneut -> Backdoor für böswillige Aktivitäten verwenden.Innerhalb können
debugfs
Sie die Datei löschen. Sie brauchen nicht einmal den Dateinamen (was relevant sein kann, wenn es Probleme mit Sonderzeichen gibt, wie Francois P in den Kommentaren vermutet hat):quelle
touch: cannot touch '/test/3': Input/output error
undEXT4-fs error (device loop2): __ext4_new_inode:1111: comm touch: failed to insert inode 13: doubly allocated?
rm
via debugfs auf gemounteten fs. Es ist also unsicher.umount
alleine (ohnefsck
) für dich OK wäre.