Qual è la dimensione massima consentita per il nome file (e la cartella) con eCryptfs?


44

Sono un nuovo utente di eCryptfs e ho una domanda basilare che non sono riuscito a trovare da nessuna parte. Sono interessato all'utilizzo di eCryptfs tramite il mio Synology NAS che utilizza Linux.

Durante il tentativo di crittografare la mia cartella (EXT4) tramite l'app di crittografia di Synology (eCryptfs), riscontro errori che indicano che la lunghezza del mio nome file non può superare i 45 caratteri (quindi nessuna crittografia).

Se il limite è davvero di 45 caratteri, eCryptfs potrebbe non essere uno strumento utilizzabile per la maggior parte.

Qual è la dimensione massima consentita per il nome file quando si crittografano file e cartelle con eCryptfs? Linux 255 caratteri?


6
Imho il modo in cui ecryptfs crittografa i nomi dei file è semplicemente ridicolo. Per prima cosa regala più di 20 byte anteponendo una stringa fissa "ECRYPTFS_FNEK_ENCRYPTED." a ciascun nome file. Quindi antepone troppi byte casuali per rendere diversi i nomi identici. EncFS lo fa in modo molto più efficiente.

Risposte:


70

Informativa completa: sono uno degli autori e l'attuale manutentore dei programmi di utilità dello spazio utente di eCryptfs.

Ottima domanda!

Linux ha una lunghezza massima di 255 caratteri per la maggior parte dei filesystem (incluso EXT4) e un percorso massimo di 4096 caratteri.

eCryptfs è un filesystem a più livelli. Si accumula su un altro file system come EXT4, che in realtà viene utilizzato per scrivere dati sul disco. eCryptfs crittografa sempre il contenuto del file, ma può eventualmente crittografare (oscurare) i nomi dei file (o meno).

Se i nomi dei file non sono crittografati, puoi tranquillamente scrivere nomi di file con un massimo di 255 caratteri e crittografarne il contenuto, poiché i nomi dei file scritti nel file system inferiore corrisponderanno semplicemente. Sebbene un utente malintenzionato non sia in grado di leggere il contenuto di index.htmlo budget.xls, potrebbe sapere quali nomi di file esistono. Ciò può (o meno) perdere informazioni sensibili a seconda del caso d'uso.

Se i nomi dei file sono crittografati, le cose diventano un po 'più complicate. eCryptfs antepone un po 'di dati sulla parte anteriore del nome file crittografato, in modo che possa identificare definitivamente i nomi file crittografati. Inoltre, la crittografia stessa comporta il "riempimento" del nome file.

Per esempio, ho un file crittografato, ~/.bashrc. Questo nome file è crittografato usando la mia chiave per:

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

Chiaramente, quel nome di file di 7 caratteri ora richiede più di 7 caratteri per essere crittografato. Empiricamente, abbiamo scoperto che i nomi di file di caratteri più lunghi di 143 caratteri iniziano a richiedere> 255 caratteri per crittografare. Quindi noi (come sviluppatori upstream di eCryptfs) in genere consigliamo di limitare i nomi dei file a ~ 140 caratteri.

Ora, tutto ciò che ha detto, Synology NAS è un prodotto commerciale che incorpora e utilizza eCryptfs e Linux per crittografare e proteggere i dati sul dispositivo. Noi (gli sviluppatori a monte di eCryptfs) non abbiamo nulla a che fare con Synology o con i loro prodotti, sebbene siamo generalmente felici di vedere gli eCryptfs usati in natura . Mi sembra che la loro raccomandazione di 45 caratteri sia un errore tipografico (dalla nostra raccomandazione di 140 caratteri) o semplicemente una stima molto più conservativa.


Mi piacerebbe davvero vedere, il filesystem overlay FUSE che si risolve da solo "nomi file troppo lunghi" e riposa solo il proxy 1: 1 con il filesystem underlaying. Tali FUSE sarebbero utili per diversi filesystem (ecryptfs, EncFS), mentre per i nomi di file attualmente supportati non cambierebbe nulla. E ancora, sarebbe facoltativo. - Il mio desiderio: unix.stackexchange.com/q/283149/9689
Grzegorz Wierzowiecki

17
Questa risposta non è del tutto corretta. La dimensione massima di un nome file è di 255 byte o tipi di caratteri C / C ++. Ma i caratteri massimi in un nome file variano. Quando si utilizza UTF-8, che è il valore predefinito per la maggior parte dei sistemi, il nome del file può essere compreso tra 63-255 caratteri (aka Code Point), se si utilizza UTF-16, 63-127. È importante notare che 1 carattere può essere uno o più byte nello spazio di archiviazione e dipende dal set di codici utilizzato dall'utente del sistema.
Rahly,

Suggerimento per lo sviluppatore: dividere i nomi crittografati tra le sottodirectory nascoste all'utente finale per ottenere la lunghezza necessaria, potenzialmente anche superando il limite di lunghezza massima del nome linux se un filesystem esterno ne ha bisogno. Un singolo file o directory diventa "ENCRYPTFS-01-OF-04 [.....] / ENCRYPTFS-02-OF-04 [.....] / ENCRYPTFS-03-OF-04 [..... ] / ENCRYPTFS-04-OF-04 [.....] "- Linux btrfs, ext1-4 e altri non hanno una profondità di directory massima definita in modo che il filesystem possa gestire i nomi di file e directory in espansione attraverso più sottodirectory non esposte come questa .
Dale Mahalko,

1
Il mio suggerimento sarebbe stato quello di archiviare qualsiasi metadata che stai memorizzando negli xattrs, anziché nel nome del file. : |
Trejkaz,

1
Dici che eCryptfs "può facoltativamente crittografare (oscuro) nomi di file (o meno)". Come posso disabilitare la crittografia dei nomi di file in modo da poter recuperare i miei nomi di file completi di 255 caratteri anziché essere limitato a 143 caratteri? Credo che il modo in cui ho installato eCryptfs sia stato selezionando la casella o qualsiasi altra cosa per "Directory home crittografata" durante il mio processo di installazione di Ubuntu.
Gabriel Staples,

11

Questo thread è molto interessante perché mi chiedevo esattamente la stessa cosa. Posso vivere con la necessità di rinominare 20 file su 50.000 se i nomi dei file devono contenere 140 caratteri o meno, ma 45 o meno non sono fattibili (nella mia situazione) perché mi richiederebbe di rinominare troppi file.

Ho posto la stessa identica domanda direttamente a Synology (anche indicandole nel presente articolo) e la loro risposta è stata interessante: "Il limite del nome file della condivisione crittografata è di 143 byte. Può contenere fino a 140 caratteri latini puri o 45 CJK (cinese , Giapponese e coreano) ".

A seguito di questa risposta ho fatto più test da solo, testando file con 45, 46, 140, 143 e 144 caratteri. I miei test mostrano che i file con un massimo di 143 caratteri (non byte, contrariamente a quanto mi ha detto Synology) verranno crittografati, ma i file con 144 caratteri impediranno la crittografia di una cartella. Tuttavia, il MESSAGGIO DI ERRORE che ricevo dal mio NAS è che il nome del file deve contenere meno di 45 caratteri (mentre la realtà è che dovrebbe essere inferiore a 144 caratteri).

Non ho fatto test con i personaggi CJK ... Ma, a chiunque legga questo, sembra che tu stia bene fino a 143 caratteri, nonostante ciò che il sistema ti dice.


7

Vorrei chiarire che Linux ha un limite di 255 byte per nome file, non 255 caratteri. Questa è una differenza significativa e se usi, ad esempio, la codifica UTF-8, potresti finire con nomi di file di massimo 100 caratteri.


1
63 è il massimo se ogni carattere utilizza la codifica massima di 4 byte per punto di codice. Questo è lo stesso per qualsiasi schema UTF (UTF-16 e UTF-32)
Rahly,

@Rahly Questo potrebbe eventualmente cambiare, comunque. Prima che il punto di codice Unicode massimo valido fosse ridotto per U+10FFFFsoddisfare i limiti di UCS-2 (sostanzialmente UTF-16 senza coppie surrogate), UTF-8 potrebbe richiedere fino a 6 byte per rappresentare un punto di codice a 32 bit a causa del modo in cui codifica "inizio del carattere" e "continuazione del carattere" per garantire che la sincronizzazione del parser possa essere riacquistata indipendentemente da dove si avvia l'analisi all'interno di un flusso di byte. È sempre possibile che alla fine decidano di annullare quella decisione perché stanno esaurendo i punti di codice non assegnati.
ssokolow,

1
Ma è altamente improbabile, a meno che non inizino ad aggiungere personaggi come matti. A partire da U8.0, vengono assegnati solo 120k. Hanno aggiunto ~ 8k caratteri in questa iterazione. Se continuano così, sarà necessario espandersi alla versione ~ 106.
Rahly,

E penso che dovrebbero prima uccidere Windows e JavaScript, dato che entrambi si affidano a UTF-16. ( Potrebbe essere possibile rettificare questo nel caso di JavaScript, però?)
SamB

1

La lunghezza del nome file di ecrypt è stata solo un problema per me in quanto avevo bisogno di una particolare sottostruttura della mia directory home per supportare nomi di file lunghi, e alla fine ho capito che potevo semplicemente creare un filesystem all'interno di un file e montare quello:

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

Probabilmente ci sono tutti i tipi di problemi di efficienza con questo, ma è sufficiente per il mio caso in cui i file sono solo risultati di test creati periodicamente per i miei scopi locali.

I miei colleghi hanno inserito la loro immagine in / tmp - i dati dei test non sono particolarmente riservati: vogliamo principalmente proteggere il nostro codice sorgente, non i risultati dei nostri test.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.