HowTo: Globbing

Dieses HowTo basiert auf der Anleitungen von Castaglia:

http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Globbing.html

Anregung und Kritik bitte ins Forum.




Globbing

Was ist Globbing ?

 

Für manche Begriffe gibt es einfach keine guten Deutschen Übersetzungen. "Globbing" ist ein Mechanismus der gebräuchlichen Unix Shells um Wildcards (also Platzhalter) zu erweitern um auf mehrere Filenamen zu passen. Siehe auch die Man Page: http://www.die.net/doc/linux/man/man7/glob.7.html)

 

Ein String ist ein Wildcard Muster wenn es eines der folgenden Zeichen enthält: `?', `*' or `['. Mit "Globbing" wird die Aktion bezeichnet, mit dem die Wildcards auf die vorhandenen Files ausgeweitet wird, die den Wildcards entsprechen. Die Entsprechungen definieren sich wie folgt:

`?' (not between brackets) ein beliebiges einzelnes Zeichen
`*' (not between brackets) eine beliebige Zeichenkette oder eine leere Zeichenkette

 

Die RFCs für das FTP Protokoll erwähnen Globbing nicht ausdrücklich, das bedeutet das FTP Server nicht unbedingt Gloobbing unterstützen müssen um der RFC zu entsprechen. Die meisten FTP Server (einschliesslich ProFTPD) unterstützen diese Funktion jedoch.

 

Der "mget" Befehl benutzt normalerweise Globbing um mehrere Files auf einmal downzuloaden, z.B.:

ftp> mget *.gz

oder

ftp> mget pub/music/*.mp3

 

 

Warum ist Globbing nun überhaupt ein Thema ?

Um die Wildcards aufzulösen und auf die Files anzuwenden müssen ggf. sehr viele Verzeichnisse durchsucht werden, die Filenamen geprüft werden und eine Liste der zutreffenden Files im Speicher aufgebaut werden. Dieses kann unter Umständen sehr aufwendig sein, sowohl für die CPU Last als auch sehr Speicherintensiv. Dieses verhalten konnte in der Vergangenheit für Denial of Service Attacken (DOS) gegen ProFTPD genutzt werden, jedoch auch gegen andere Anwendungen. Siehe auch: http://bugs.proftpd.org/show_bug.cgi?id=1066. Dieser Bug Report zeigt ein Beispiel wie Globbing als Attacke genutzt werden konnte.

 

Einige FTP Server (z.B. wu-ftpd) haben ihre eigene Globbing Routine, andere (z.B. ProFTPD) benutzen die C Bibliothek des Systems. Der GNU Globbing Code, nun integriert und benutzt von ProFTPD, wurde dementsprechend angepasst und wird nun ausschliesslich von ProFTPD benutzt.

Ab und zu wird dieses Verhalten in verschiedenen Mailinglisten diskutiert. Da wie beschrieben einige Systemresourcen für das Globbing benötigt werden, berichten einige User von DOS Attacken. Daher kann ProFTPD das Verhalten beim Globbing limitieren, um den Anforderungen der Seite besser gerecht zu werden.

 

Einschränkungen beim Globbing:

ProFTPD hat verschiedene Möglichkeiten das Globbing einzuschränken oder zu verbieten. Falls man für die Seite kein Globbing benötigt, dann empfiehlt sich dieses vollständig zu deaktivieren. Dieses kann wie folgt geschehen:

UseGlobbing off

 

Wird hingegen Globbing benötigt, dann gibt es andere Möglichkeiten die Verwendung von Resourcen zu limitieren, die "RLimitCPU" und "RLimitMemory" Anweisungen. Ab ProFTPD 1.2.7 können diese auch nur auf die einzelnen Sesssions beschränkt werden:

RLimitCPU session ...

RLimitMemory session ...

 

Ausserdem gibt es ab ProFTPD 1.2.8rc1 eine weitere Funktion für vorsichtige Administratoren: die Beschränkung wie viele Verzeichnissebenen  durch das Globbing maximale durchsucht werden. Dieses ist durch die GNU Library auf maximal 8 festgesetzt, kann durch die Angabe "PR_TUNABLE_GLOBBING_MAX" bei ./configure jedoch weiter beschränkt werden. In diesem Falle sieht die configure Zeile etwa so aus:

CFLAGS="-DPR_TUNABLE_GLOBBING_MAX=3" ./configure ...

 

Ein Globbing Ausdruck mit mehr Verzeichnisebenen wird nicht ausgeführt, sondern der Code gibt sofort "Out of Memory" zurück.