Сценарий оболочки для вычисления хэша для каждых X байтов

Это хороший вопрос, но на него очень трудно ответить, потому что он очень открытый.

Сосредоточившись на части «код может выполняться в корневом пространстве имен», это зависит от того, что вы подразумеваете под «кодом»:

  • Часть пользовательского пространства должна быть изолирована даже без пространств имен. т.е. весь код, который вы пишете, выполняется отдельно от всего остального,независимо от пространств имен
  • Само ядро, когда оно вызывается через системные вызовы, всегда имеет доступ ко всему (, если только это не сама виртуальная машина ). Это означает, что части ядра никак не изолированы. [1]

То, что #2 выше, означает, что они осведомлены о пространстве имен -посредством абстракций процесса -. т.е. их запись в таблице процессов указывает на части пространства имен (, например. корневая файловая система ), прямо или косвенно. С этого момента, пока что-то на стороне ядра -работает, оно должно быть «изолировано», потому что оно всегда будет обращаться к правильному набору данных.

Однако это не означает, что ошибки не могут повлиять на все аспекты работающей системы, включая другие контейнеры.

Если вы хотите запустить что-то в изолированной системе, вам понадобится полнофункциональная виртуальная машина или Linux в пользовательском пространстве. Контейнеры предназначены для изоляции процессов и того, что они видят и к чему могут получить доступ. Когда есть ошибка, они могут выйти за пределы своих ограничений, точно так же, как обычный процесс может в конечном итоге запустить код от имени пользователя root.

[1] Почти все, что связано с системой, делается с помощью системных вызовов. Например. открытие файла, запись в сокет, отправка сигнала и т. д.

-1
19.01.2021, 05:42
2 ответа

Используйте split --bytes=$((32*1024))для создания четырех частей файла, затем хешируйте их по отдельности.

0
18.03.2021, 22:36

Использование GNUsplit:

for i in {1..4}; do
  split -n"$i"/4 file | sha256sum
done
2
18.03.2021, 22:36

Теги

Похожие вопросы