есть ли что-то вроде альтернативных потоков данных в любой файловой системе Linux?

В Windows NTFS есть хорошая, но в основном неиспользуемая функция под названием «Альтернативные потоки данных» (ADS), которую я недавно использовал в проекте хобби-разработчика.

В Mac HFS+ также есть такая же приятная, но в основном неиспользуемая функция, которая называется «именованные вилки».

Я думаю о переносе этого проекта на Linux, но я не знаю, есть ли такая функция в какой-либо файловой системе в Linux?


person Peter Parker    schedule 07.10.2008    source источник
comment
В основном не используется? Вы уверены, что. Это очень удобно для сокрытия данных.   -  person Pacerier    schedule 19.03.2015
comment
@Pacerier: не используется, кажется, что никакой пользовательский интерфейс или приложения никак не взаимодействуют с ним.   -  person Peter Parker    schedule 20.03.2015
comment
Именно поэтому именно они полезны для сокрытия вирусов.   -  person Pacerier    schedule 23.03.2015


Ответы (6)


Как в Windows, так и в Linux (и других операционных системах) существуют файловые системы, поддерживающие расширенные атрибуты (EA). Поддержка Windows была добавлена ​​для совместимости с OS/2 и не имеет какого-либо документированного интерфейса, кроме хакерского метода через API резервного копирования (это то, что делает Cygwin). Советники предназначены для хранения только небольших значений. В Windows каждый советник имеет имя ASCII (в то время как почти все остальные имена имеют кодировку Unicode), а общий размер всех советников в файле не может превышать 64 КБ. Советники — это не файлы: вы не можете открыть дескриптор файла советника и прочитать его как обычный файл.

Альтернативные потоки данных — это отдельная функция, предоставляемая NTFS, которая позволяет вам предоставлять альтернативные подфайлы внутри файла. Каждый файл имеет безымянный поток данных по умолчанию, который автоматически открывается, если вы не укажете альтернативный. Вы можете открыть дескриптор ADS и прочитать (даже выполнить) его как обычный файл с одним именем файла (Unicode). ADS может быть таким же большим, как любой файл на диске.

Я не знаю точного аналога ADS в Linux, но вы можете вместо этого использовать советники в порте Linux, если значения данных малы.

person Chris Smith    schedule 07.10.2008
comment
поток данных по умолчанию называется «ДАННЫЕ» - person Dan D.; 24.01.2011
comment
@DanD., $DATA, а не DATA. - person Pacerier; 19.03.2015

Проблема с ADS заключается в том, что Windows «потеряет» эти потоки ADS, как только переместится в любую файловую систему, отличную от NTFS. Он не считает эти потоки важными, поэтому часто их не хранят. Вы обнаружите, что они недоступны или исчезают при подключении к сетевому ресурсу, записи на компакт-диск, переносе на USB-накопитель и т. д.

Короче говоря, если у вас нет очень узкой направленности для вашего приложения (всегда на NTFS), я бы вообще избегал потоков ADS.

person hova    schedule 07.10.2008
comment
Это приемлемо для некоторых случаев использования, таких как кэширование метаданных или смещений файлов, которые в противном случае могут быть (повторно) сгенерированы/вычислены с большими усилиями. - person hippietrail; 09.12.2012

Расширенные атрибуты поддерживаются некоторыми файловыми системами, в частности XFS и (я думаю) JFS; но ограничены по размеру (64 КБ в XFS). Reiser4 поддерживает вилки произвольного размера; но он не поддерживается ни одним известным мне дистрибутивом. Другой вариант — ZFS, опять же не очень удобный.

В конце концов, наверное, разумнее просто использовать каталог.

person Javier    schedule 07.10.2008

Большинство файловых систем Linux имеют extended attributes. Я не знаком с потоками NTFS, поэтому не могу их сравнивать. Большинство файловых систем должны быть смонтированы с флагами, чтобы активировать расширенные атрибуты, поэтому это может не работать ни для одной системы. Обычно они обозначаются аббревиатурой xattr или xattrs.

person Peter Shinners    schedule 07.10.2008

Единственное, что я знаю, что идет в этом направлении, это расширенные атрибуты, но из того, что я читайте о ADS, это деф. не то же самое. Для чего именно вы это используете?

person André    schedule 07.10.2008

Обычно используемые файловые системы Linux не поддерживают это. Вместо этого вы можете использовать несколько файлов и подходящую схему именования (возможно, просто добавьте индекс потока к каждому имени файла) или архив, содержащий несколько файлов; вы обнаружите, что такой подход в любом случае лучше в других отношениях - например, что произойдет в Windows, если кто-то захочет сделать резервную копию файлов Windows на носителе с файловой системой, отличной от NTFS?

person moonshadow    schedule 07.10.2008
comment
Вы должны использовать программу резервного копирования, которая использует API резервного копирования — они будут упаковывать все метаданные в файле (EA, дескриптор безопасности, потоки данных, зашифрованные файлы и т. д.) в один поток для сохранения и последующего восстановления. - person Chris Smith; 07.10.2008