Какой сказанный posipiet, плюс: это означает, что два набора доверяемой информации необходимы для получения корневого доступа, не всего один; пароль root самостоятельно становится бесполезным, и может только быть усилен вместе с учетной записью обычного пользователя (и если доступ к su ограничивается, только вместе с учетной записью доверяемого пользователя).
Да, есть очень правдоподобный способ сделать это с помощью устройства сопоставления.
Устройство сопоставления устройств может рекомбинировать блочные устройства в новое сопоставление / порядок по вашему выбору. LVM делает это. Он также поддерживает другие цели (некоторые из которых совершенно новы), такие как «flakey» для имитации неисправного диска и «error» для имитации неисправных областей диска.
Можно сконструировать устройство, которое намеренно содержит черные дыры ввода-вывода, которые будут сообщать об ошибках ввода-вывода при пересечении.
Сначала создайте некоторый виртуальный том для использования в качестве цели и сделайте его адресуемым как блочное устройство.
dd if=/dev/zero of=/var/lib/virtualblock.img bs=512 count=1048576
losetup /dev/loop0 /var/lib/virtualblock.img
Итак, для начала создается файл размером 512 МБ, который является основой нашего виртуального блочного устройства. в котором мы проделаем «дыру». Однако дыры еще нет. Если бы вы использовали mkfs.ext4 / dev / loop0
, вы бы получили совершенно корректную файловую систему.
Итак, Сначала приведем пример
dmsetup create errdev0
0 261144 linear /dev/loop0 0
261144 5 error
261149 787427 linear /dev/loop0 261139
. Это создаст устройство с именем 'errdev0' (обычно в / dev / mapper). Когда вы набираете dmsetup create errdev0
, он будет ждать stdin и завершит ввод ^ D.
В приведенном выше примере мы сделали отверстие в 5 секторов (2,5 КБ) в секторах 261144 из петлевое устройство. Затем мы продолжим работу с устройством цикла, как обычно.
Этот сценарий попытается сгенерировать вам таблицу, которая будет размещать дыры в случайных местах размером примерно 16 МБ (хотя это довольно случайно).
#!/bin/bash
start_sector=0
good_sector_size=0
for sector in {0..1048576}; do
if [[ ${RANDOM} == 0 ]]; then
echo "${start_sector} ${good_sector_size} linear /dev/loop0 ${start_sector}"
echo "${sector} 1 error"
start_sector=$((${sector}+1))
good_sector_size=0
else
good_sector_size=$((${good_sector_size}+1))
fi
done
echo "${start_sector} $((${good_sector_size}-1)) linear /dev/loop0 ${start_sector}"
Сценарий предполагает, что у вас также есть создано устройство размером 512 МБ, и ваше виртуальное блочное устройство находится на / dev / loop0
.
Вы можете просто вывести эти данные в текстовый файл в виде таблицы и передать их в dmsetup create errdev0
.
После создания устройства вы можете начать использовать его как обычное блочное устройство, сначала отформатировав его, а затем разместив на нем файлы. В какой-то момент вы должны столкнуться с некоторыми проблемами ввода-вывода, когда вы сталкиваетесь с секторами, которые на самом деле являются дырами ввода-вывода в виртуальном устройстве.
После того, как вы закончите, используйте dmsetup remove errdev0
, чтобы удалить устройство.
Если Если вы хотите повысить вероятность возникновения ошибки ввода-вывода, вы можете чаще добавлять отверстия или изменять размер создаваемых отверстий. Обратите внимание: размещение ошибок в определенных разделах может вызвать проблемы с самого начала, IE на 32 МБ в устройство, вы не можете записать суперблок, который обычно пытается сделать ext, поэтому формат не работает ..
Для дополнительного удовольствия - - вы можете просто losetup
, затем mkfs.ext4 / dev / loop0
и заполнить его данными.
Для проверки устойчивости программы в случае сбоя их вывода вы можете использовать псевдоустройство / dev / full
, которое всегда возвращает "ENOSPACE" при записи в.
$ dd if=/dev/zero of=/dev/full
dd: writing to `/dev/full': No space left on device
1+0 records in
0+0 records out
Вы можете сделать это множеством интересных способов. См. https://www.kernel.org/doc/Documentation/fault-injection/fault-injection.txt
Возможно, вы могли бы изменить таблицу разделов и сделать раздел больше, чем он есть на самом деле. Это, вероятно, вызовет ошибку ввода-вывода. Или, если у вас есть диски с возможностью горячей замены, вы можете просто вытащить один из них.
Зависит от того, что вы хотите протестировать. Используя библиотеку LD_PRELOAD
ed, вы можете обмануть приложения, заставив их думать, например, что «все записи завершаются неудачно с ENOSPC
или EIO
».