*Markus: Endlosreferenz als Verzeichnisanomalie

Hallo,

gestern passierte mir etwas ganz Eigenartiges. Ich wollte ein Backup meiner lokalen Serverdaten machen, indem ich sie auf meinen Webspace hochgeladen hätte. Dabei werkte mein FTP-Programm so seltsam rum und die Auslastung schoss auf 100%, wodurch ich das Programm mit killall -9 nur mehr abschießen konnte.
Danach sah ich mir die hochzuladenden Daten an, und bemerkte, dass das Verzeichnis htdocs in meinem htdocs-Verzeichnis meines Apache, das ich hochladen wollte, nochmals exisitert. Ich dachte zuerst, dass es vll. ein leeres Verzeichnis sein würde, undich es mal versehentlich angelegt hätte, aber als ich in das Verzeichnis hinein sah, waren darin wieder alle Daten, die das Haupt-htdocs-Verzeichnis beinhaltete. Darin befand sich wieder ein htdocs-Verzeichnis...usw.
Zuerst dachte ich, dass ich meinen Augen nicht traue, und ich nur falsch die Verzeichnisse gewechselt hätte, aber es war tatsächlich so. Offensichtlich wurde daraufhin der Hochladeprozess in eine Endlosschleife verstrickt und noch dazu landete ich aus Sicherheitsgründen durch diese Endlosschleife auf einer automatischen Blackliste meines Providers. Durch eine kurze Erklärung wurde meine IP übrigens wieder von der Blacklist entfernt.
Bei diesem Endlos-Verzeichnis handelte es definitiv nicht um einen symbolischen Link, sondern wirklich um ein Verzeichnis. Ich habe es extra mit "file htdocs" überprüft, da ich ja nicht glaubte, was ich hier sah.
Nach diesem Vorfall löschte ich mal das innere htdocs-Verzeichnis und plötzlich war das übergeordnete Hauptverzeichnis auch leer. Es muss also definitiv das selbe Verzeichnis gewesen sein, aber wie ist das möglich und vor allem, wie entand dies, denn ich wüsste nicht, wie ich so ein Kunststück erschaffen hätte können?

Markus

  1. gestern passierte mir etwas ganz Eigenartiges. Ich wollte ein Backup meiner lokalen Serverdaten machen, indem ich sie auf meinen Webspace hochgeladen hätte. Dabei werkte mein FTP-Programm so seltsam rum und die Auslastung schoss auf 100%, wodurch ich das Programm mit killall -9 nur mehr abschießen konnte.
    Danach sah ich mir die hochzuladenden Daten an, und bemerkte, dass das Verzeichnis htdocs in meinem htdocs-Verzeichnis meines Apache, das ich hochladen wollte, nochmals exisitert.

    Warum sollte ja wohl klar sein, das FTP-Tool muss u.a. wegen der Aktualisierung vorhandener Dateien eine "Transaktion bauen", also eine temporäre Datenbasis aufbauen und irgendwann umschalten. Da dieser Prozess gestoppt worden ist, hast Du Datenvermehrung.

    Manche FTP-Tools sind nicht so schlau und arbeiten ohne "Transaktionen", d.h. da verschwinden dann schon mal files.   LOL

    1. Hallo,

      Manche FTP-Tools sind nicht so schlau und arbeiten ohne "Transaktionen", d.h. da verschwinden dann schon mal files.   LOL

      Nun, beim Löschen des inneren Verzeichnisses sind die äußeren Daten ebenfalls verschwunden, also kommt es im Endeffekt auf das gleiche raus.

      Markus

  2. Hallo,

    Nach diesem Vorfall löschte ich mal das innere htdocs-Verzeichnis und plötzlich war das übergeordnete Hauptverzeichnis auch leer. Es muss also definitiv das selbe Verzeichnis gewesen sein, aber wie ist das möglich und vor allem, wie entand dies, denn ich wüsste nicht, wie ich so ein Kunststück erschaffen hätte können?

    Da war ein symbolischer Link zu Deinem htdocs in Deinem htdocs Verzeichnis.

    zum Probieren:

    :~# mkdir test
    :~# cd test
    :~/test# mkdir htdocs
    :~/test# cd htdocs
    :~/test/htdocs# touch file1
    :~/test/htdocs# touch file2
    :~/test/htdocs# touch file3
    :~/test/htdocs# ls -i
    1933452 file1  1933453 file2  1933454 file3
    :~/test/htdocs# ln -s . htdocs
    :~/test/htdocs# ls -i
    1933452 file1  1933453 file2  1933454 file3  1933455 htdocs
    :~/test/htdocs# cd htdocs
    :~/test/htdocs/htdocs# cd htdocs
    :~/test/htdocs/htdocs/htdocs# ls -i
    1933452 file1  1933453 file2  1933454 file3  1933455 htdocs
    :~/test/htdocs/htdocs/htdocs# rm *
    :~/test/htdocs/htdocs/htdocs# ls -i
    :~/test/htdocs/htdocs/htdocs# cd ..
    :~/test#

    alles klar?

    viele Grüße

    Axel

    1. Hallo,

      du hast recht. Es ist tatsächlich ein symbolischer Link. Es zeigt mir nämlich "directory" bei "$ file htdocs" an, obwohl ich einen symbolischen Link setzte. Ich dachte, es würde mir einen Hinweis auf einen symbolischen Link geben, weswegen ich letztendlich auch so verblüfft war.

      Markus

      1. Hallo,

        du hast recht. Es ist tatsächlich ein symbolischer Link. Es zeigt mir nämlich "directory" bei "$ file htdocs" an, obwohl ich einen symbolischen Link setzte. Ich dachte, es würde mir einen Hinweis auf einen symbolischen Link geben, weswegen ich letztendlich auch so verblüfft war.

        Huch! Das hatte ich in Deinem Ausgangsposting ganz überlesen. Das ist wirklich seltsam. Bist Du sicher, dass Du "file htdocs" von _innerhalb_ des Verzeichnisses htdocs aufrufst, mit dem "htdocs" also wirklich den Link ansprichst? Bei mir sieht das dann so aus:

        :~/test/htdocs# file htdocs
        htdocs: symbolic link to `.'

        viele Grüße

        Axel

        1. Hallo,

          ok, ich konnte das Phänomen nun nachvollziehen. Offensichtlich macht es einen Unterschied, wenn beim symbolischen Link einmal der Slash zusätzlich angefügt wird und einmal nicht. Dasselbe gilt beim Löschen. Ist ein Slash hinzugefügt, wird alles weggefegt. Siehe selbst:

          markus@gentoo ~/test $ mkdir htdocs
          markus@gentoo ~/test $ ls
          htdocs
          markus@gentoo ~/test $ cd htdocs/
          markus@gentoo ~/test/htdocs $ touch datei1
          markus@gentoo ~/test/htdocs $ touch datei2
          markus@gentoo ~/test/htdocs $ ls -al
          insgesamt 8
          drwxr-xr-x 2 markus users 4096 18. Mär 18:38 .
          drwxr-xr-x 3 markus users 4096 18. Mär 18:38 ..
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei1
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei2
          markus@gentoo ~/test/htdocs $ ln -s . htdocs
          markus@gentoo ~/test/htdocs $ ls -al
          insgesamt 8
          drwxr-xr-x 2 markus users 4096 18. Mär 18:39 .
          drwxr-xr-x 3 markus users 4096 18. Mär 18:38 ..
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei1
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei2
          lrwxrwxrwx 1 markus users    1 18. Mär 18:39 htdocs -> .
          markus@gentoo ~/test/htdocs $ file htdocs/
          htdocs/: directory
          markus@gentoo ~/test/htdocs $ file htdocs
          htdocs: symbolic link to `.'
          markus@gentoo ~/test/htdocs $ cd htdocs
          markus@gentoo ~/test/htdocs/htdocs $ ls -al
          insgesamt 8
          drwxr-xr-x 2 markus users 4096 18. Mär 18:39 .
          drwxr-xr-x 3 markus users 4096 18. Mär 18:38 ..
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei1
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei2
          lrwxrwxrwx 1 markus users    1 18. Mär 18:39 htdocs -> .
          markus@gentoo ~/test/htdocs/htdocs $ cd ..
          markus@gentoo ~/test/htdocs $ rm -r htdocs
          markus@gentoo ~/test/htdocs $ ls -al
          insgesamt 8
          drwxr-xr-x 2 markus users 4096 18. Mär 18:39 .
          drwxr-xr-x 3 markus users 4096 18. Mär 18:38 ..
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei1
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei2
          markus@gentoo ~/test/htdocs $ ln -s . htdocs
          markus@gentoo ~/test/htdocs $ ls -al
          insgesamt 8
          drwxr-xr-x 2 markus users 4096 18. Mär 18:40 .
          drwxr-xr-x 3 markus users 4096 18. Mär 18:38 ..
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei1
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei2
          lrwxrwxrwx 1 markus users    1 18. Mär 18:40 htdocs -> .
          markus@gentoo ~/test/htdocs $ cd htdocs
          markus@gentoo ~/test/htdocs/htdocs $ ls -al
          insgesamt 8
          drwxr-xr-x 2 markus users 4096 18. Mär 18:40 .
          drwxr-xr-x 3 markus users 4096 18. Mär 18:38 ..
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei1
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei2
          lrwxrwxrwx 1 markus users    1 18. Mär 18:40 htdocs -> .
          markus@gentoo ~/test/htdocs/htdocs $ cd htdocs/
          markus@gentoo ~/test/htdocs/htdocs/htdocs $ ls -al
          insgesamt 8
          drwxr-xr-x 2 markus users 4096 18. Mär 18:40 .
          drwxr-xr-x 3 markus users 4096 18. Mär 18:38 ..
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei1
          -rw-r--r-- 1 markus users    0 18. Mär 18:38 datei2
          lrwxrwxrwx 1 markus users    1 18. Mär 18:40 htdocs -> .
          markus@gentoo ~/test/htdocs/htdocs/htdocs $ cd ..
          markus@gentoo ~/test/htdocs/htdocs $ cd ..
          markus@gentoo ~/test/htdocs $ rm -r htdocs/
          rm: Entfernen von Verzeichnis »htdocs/« nicht möglich: Datei oder Verzeichnis nicht gefunden
          markus@gentoo ~/test/htdocs $ ls -al
          insgesamt 8
          drwxr-xr-x 2 markus users 4096 18. Mär 18:40 .
          drwxr-xr-x 3 markus users 4096 18. Mär 18:38 ..
          markus@gentoo ~/test/htdocs $ cd ..
          markus@gentoo ~/test $ ls
          htdocs

          Markus

  3. Hallo *Markus.

    Bei diesem Endlos-Verzeichnis handelte es definitiv nicht um einen symbolischen Link, sondern wirklich um ein Verzeichnis.

    Vielleicht um einen Hardlink? Wie hoch ist der Linkcounter für das htdocs-Verzeichnis?

    Einen schönen Sonntag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. echo $begrüßung;

      Bei diesem Endlos-Verzeichnis handelte es definitiv nicht um einen symbolischen Link, sondern wirklich um ein Verzeichnis.

      Vielleicht um einen Hardlink? Wie hoch ist der Linkcounter für das htdocs-Verzeichnis?

      Als ich eben zum Testen einen Hardlink auf ein Verzeichnis anlegen wollte, wurde mir das von ln verwehrt: ln: „x“: harte Verknüpfung für Verzeichnisse nicht erlaubt

      echo "$verabschiedung $name";

      1. Hallo,

        Bei diesem Endlos-Verzeichnis handelte es definitiv nicht um einen symbolischen Link, sondern wirklich um ein Verzeichnis.
        Vielleicht um einen Hardlink? Wie hoch ist der Linkcounter für das htdocs-Verzeichnis?
        Als ich eben zum Testen einen Hardlink auf ein Verzeichnis anlegen wollte, wurde mir das von ln verwehrt: ln: „x“: harte Verknüpfung für Verzeichnisse nicht erlaubt

        Naja, das ist ein Schutz des Systems. Im Prinzip ist ein Hardlink ja nur ein weiterer Eintrag im Filesystem mit der selben inode-Nummer, wie der des Ziels. Die Einträge . und .. sind ja auch Hardlinks zu Verzeichnissen. Dieser Hardlink könnte also doch irgendwie "entstanden" sein. Das würde auch erklären, warum file "directory" ausgibt.

        viele Grüße

        Axel