Was ist die maximal zulässige Dateigröße (und Ordnergröße) bei eCryptfs?


44

Ich bin ein neuer eCryptfs-Benutzer und habe eine sehr grundlegende Frage, die ich nirgendwo finden konnte. Ich möchte eCryptfs über mein Synology NAS verwenden, das Linux verwendet.

Beim Versuch, meinen Ordner (EXT4) über die Verschlüsselungs-App von Synology (eCryptfs) zu verschlüsseln, treten Fehler auf, die besagen, dass mein Dateiname nicht länger als 45 Zeichen sein darf (also keine Verschlüsselung).

Wenn das Limit wirklich 45 Zeichen beträgt, ist eCryptfs für die meisten möglicherweise nicht verwendbar.

Was ist die maximal zulässige Dateigröße beim Verschlüsseln von Dateien und Ordnern mit eCryptfs? Beträgt Linux 255 Zeichen?


6
Ich finde es lächerlich, wie ecryptfs Dateinamen verschlüsselt. Zuerst werden mehr als 20 Bytes ausgegeben, indem eine feste Zeichenfolge "ECRYPTFS_FNEK_ENCRYPTED" vorangestellt wird. zu jedem Dateinamen. Dann werden viel zu viele zufällige Bytes vorangestellt, um identische Namen unterschiedlich aussehen zu lassen. EncFS erledigt dies wesentlich effizienter.

Antworten:


70

Vollständige Offenlegung: Ich bin einer der Autoren und der aktuelle Betreuer der eCryptfs Userspace-Dienstprogramme.

Gute Frage!

Linux hat eine maximale Dateinamenlänge von 255 Zeichen für die meisten Dateisysteme (einschließlich EXT4) und einen maximalen Pfad von 4096 Zeichen.

eCryptfs ist ein mehrschichtiges Dateisystem. Es wird über einem anderen Dateisystem wie EXT4 gestapelt, das tatsächlich zum Schreiben von Daten auf die Festplatte verwendet wird. eCryptfs verschlüsselt Dateiinhalte immer, kann jedoch optional Dateinamen verschlüsseln (undeutlich machen) (oder nicht).

Wenn Dateinamen nicht verschlüsselt sind, können Sie sicher Dateinamen mit bis zu 255 Zeichen schreiben und deren Inhalt verschlüsseln, da die in das untere Dateisystem geschriebenen Dateinamen einfach übereinstimmen. Während ein Angreifer den Inhalt von index.htmloder nicht lesen kann budget.xls, weiß er, welche Dateinamen existieren. Abhängig von Ihrem Anwendungsfall können dadurch vertrauliche Informationen verloren gehen (oder auch nicht).

Wenn Dateinamen verschlüsselt sind, wird es etwas komplizierter. eCryptfs stellt dem verschlüsselten Dateinamen ein wenig Daten voran, damit verschlüsselte Dateinamen eindeutig identifiziert werden können. Auch die Verschlüsselung selbst beinhaltet das "Auffüllen" des Dateinamens.

Ich habe zum Beispiel eine verschlüsselte Datei ~/.bashrc. Dieser Dateiname wird mit meinem Schlüssel verschlüsselt, um:

/home/kirkland/.Private/ECRYPTFS_FNEK_ENCRYPTED.dWek2i3.WxXtwxzQdkM23hiYK757lNI7Ydf0xqZ1LpDovrdnruDb1-5l67.EU--

Für diesen 7-stelligen Dateinamen müssen jetzt mehr als 7 Zeichen verschlüsselt werden. Empirisch haben wir festgestellt, dass Zeichendateinamen, die länger als 143 Zeichen sind, zum Verschlüsseln mehr als 255 Zeichen erfordern. Daher empfehlen wir (als Entwickler von eCryptfs), die Dateinamen auf ca. 140 Zeichen zu beschränken.

Das Synology NAS ist ein kommerzielles Produkt, das eCryptfs und Linux zum Verschlüsseln und Sichern von Daten auf dem Gerät verwendet. Wir (die Upstream-Entwickler von eCryptfs) haben nichts mit Synology oder ihren Produkten zu tun, obwohl wir uns im Allgemeinen darüber freuen, dass eCryptfs in freier Wildbahn eingesetzt wird . Es scheint mir, dass ihre Empfehlung von 45 Zeichen entweder ein Tippfehler (aus unserer Empfehlung von 140 Zeichen) oder einfach eine weitaus konservativere Schätzung ist.


Ich würde wirklich gerne sehen, FUSE-Overlay-Dateisystem, das seine eigenen "zu langen Dateinamen" auflöst und nur Proxy 1: 1 mit darunter liegendem Dateisystem ruht. Solche FUSE-Dateien wären für verschiedene Dateisysteme (ecryptfs, EncFS) nützlich, während sich an den derzeit unterstützten Dateinamen nichts ändern würde. Und nochmal, wäre optional. - Mein Wunsch: unix.stackexchange.com/q/283149/9689
Grzegorz Wierzowiecki

17
Diese Antwort ist nicht ganz richtig. Die maximale Größe eines Dateinamens beträgt 255 Bytes oder C / C ++ - Zeichenarten. Die maximale Anzahl der Zeichen in einem Dateinamen ist jedoch unterschiedlich. Wenn Sie UTF-8 verwenden, das für die meisten Systeme die Standardeinstellung ist, kann der Dateiname zwischen 63 und 255 Zeichen (auch als Code Points bezeichnet) betragen, wenn Sie UTF-16, 63-127 verwenden. Es ist wichtig zu beachten, dass 1 Zeichen ein oder mehrere Bytes im Speicherplatz sein kann und von dem vom Benutzer des Systems verwendeten Codesatz abhängt.
Rahly

Vorschlag an den Entwickler: Verteilen Sie verschlüsselte Namen auf Unterverzeichnisse, die dem Endbenutzer verborgen bleiben, um die erforderliche Länge zu erhalten. Möglicherweise wird sogar die maximale Länge für Linux-Namen überschritten, wenn dies von einem externen Dateisystem benötigt wird. Eine einzelne Datei oder ein Verzeichnis wird zu "ENCRYPTFS-01-OF-04 [.....] / ENCRYPTFS-02-OF-04 [.....] / ENCRYPTFS-03-OF-04 [..... ] / ENCRYPTFS-04-OF-04 [.....] "- Linux btrfs, ext1-4 und andere haben keine definierte maximale Verzeichnistiefe, sodass das Dateisystem das Erweitern von Datei- und Verzeichnisnamen über mehrere unbelichtete Unterverzeichnisse wie dieses hinweg verarbeiten kann .
Dale Mahalko

1
Mein Vorschlag wäre gewesen, alle Metadaten, die Sie speichern, in den xattrs anstelle des Dateinamens zu speichern. : |
Trejkaz

1
Sie sagen, eCryptfs "kann optional Dateinamen verschlüsseln (obskure) (oder nicht)." Wie kann ich deaktivieren Dateinamen Verschlüsselung , damit ich meine vollen 255-Zeichen - Dateinamen erhalten kann zurück statt auf 143 Zeichen begrenzt ist von? Ich glaube, ich habe eCryptfs übrigens installiert, indem ich während meines Ubuntu-Installationsprozesses das Kontrollkästchen oder was auch immer auf "Encrypted home directory" überprüft habe.
Gabriel Staples

11

Dieser Thread ist sehr interessant, weil ich mich genau das Gleiche gefragt habe. Ich kann damit leben, dass ich 20 von 50 000 Dateien umbenennen muss, wenn die Dateinamen 140 Zeichen oder weniger haben müssen, aber 45 oder weniger (in meiner Situation) nicht möglich sind, weil ich zu viele Dateien umbenennen müsste.

Ich habe Synology genau dieselbe Frage direkt gestellt (und sie sogar auf den vorliegenden Artikel verwiesen), und ihre Antwort war interessant: "Das Dateinamenlimit der verschlüsselten Freigabe beträgt 143 Byte. Es kann bis zu 140 reine lateinische Zeichen oder 45 CJK (Chinesisch) sein , Japanische und koreanische) Zeichen. "

Nach dieser Antwort testete ich mich selbst weiter und testete mit Dateien mit 45, 46, 140, 143 und 144 Zeichen. Meine Tests zeigen, dass Dateien mit bis zu 143 Zeichen (nicht Bytes, im Gegensatz zu den Angaben von Synology) verschlüsselt werden. Dateien mit 144 Zeichen verhindern jedoch, dass ein Ordner verschlüsselt wird. Die FEHLERMELDUNG, die ich von meinem NAS erhalte, ist, dass der Dateiname weniger als 45 Zeichen haben muss (in Wirklichkeit sollte er weniger als 144 Zeichen haben).

Ich habe keine Tests mit CJK-Zeichen durchgeführt ... Aber für jeden, der dies liest, scheint es, als ob Sie bis zu 143 Zeichen in Ordnung sind, ungeachtet dessen, was das System Ihnen sagt.


7

Ich möchte klarstellen, dass Linux ein Limit von 255 Bytes pro Dateiname hat, nicht 255 Zeichen. Dies ist ein wesentlicher Unterschied. Wenn Sie beispielsweise UTF-8-Codierung verwenden, werden möglicherweise Dateinamen mit maximal 100 Zeichen angezeigt.


1
63 ist das Maximum, wenn jedes Zeichen die maximale Codierung von 4 Bytes pro Codepunkt verwendet. Dies gilt für alle UTF-Schemata (UTF-16 und UTF-32)
Rahly,

@Rahly Das kann sich aber irgendwann ändern. Bevor der maximal gültige Unicode-Codepunkt U+10FFFFauf die Einschränkungen von UCS-2 (im Grunde UTF-16 ohne Ersatzpaare) reduziert wurde , konnte UTF-8 aufgrund seiner Codierung bis zu 6 Byte für die Darstellung eines 32-Bit-Codepunkts erfordern "Beginn des Zeichens" und "Fortsetzung des Zeichens", um sicherzustellen, dass die Parsersynchronisation erneut erfasst werden kann, unabhängig davon, wo Sie mit dem Parsen innerhalb eines Byte-Streams beginnen. Es ist immer eine Möglichkeit, dass sie sich irgendwann dazu entschließen, diese Entscheidung rückgängig zu machen, weil ihnen nicht zugewiesene Codepunkte ausgehen.
ssokolow

1
Aber höchst unwahrscheinlich, wenn sie nicht anfangen, Charaktere wie mad hinzuzufügen. Ab U8.0 sind nur noch 120k vergeben. Sie haben ~ 8k Zeichen in dieser Iteration hinzugefügt. Wenn sie so weitermachen, muss es mit Version ~ 106 erweitert werden.
Rahly

Und ich denke, sie müssten zuerst auch Windows und JavaScript deaktivieren, da sie beide auf UTF-16 angewiesen sind. (Es könnte jedoch möglich sein, dies in JavaScript zu korrigieren?)
SamB

1

Die Dateinamenlänge von ecrypt war für mich nur deshalb ein Problem, weil ich einen bestimmten Teilbaum meines Home-Verzeichnisses benötigte, um lange Dateinamen zu unterstützen. Schließlich wurde mir klar, dass ich einfach ein Dateisystem in einer Datei erstellen und Folgendes bereitstellen konnte:

dd if=/dev/zero of=/home/me/.some.img bs=1024 count=1024
mkfs.ext3 /home/me/.some.img
chmod 777 /home/me/longfilenames
sudo mount /home/me/.some.img /home/me/longfilenames

Es gibt wahrscheinlich alle möglichen Effizienzprobleme, aber es ist ausreichend für den Fall, dass die Dateien nur Testergebnisse sind, die regelmäßig für meine eigenen lokalen Zwecke erstellt werden.

Meine Kollegen haben ihr Image in / tmp abgelegt - die Testdaten sind nicht besonders vertraulich: Wir wollen hauptsächlich unseren Quellcode sichern, nicht unsere Testergebnisse.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.