Я работаю над браузерным дистрибутивом на основе Ubuntu, который должен запускаться вживую. Частью решения безопасности является использование sdmem, когда он выключается. sdmem стирает доступную оперативную память и находится в пакете secure-delete в репозиториях Ubuntu. sdmem не вызывается в сценариях ниже.
У меня было такое решение, работающее для другого проекта, настроенного таким же образом, поэтому я знаю, что оно работает. Но иногда в другом проекте, посвященном выключению и перезапуску, я не всегда выводил стандарт, который дает sdmem при стирании. (Обычно sdmem выплевывает кучу звездочек.) Я отключил графический плимут, чтобы я мог посмотреть на результат.
Вот моя информация о скрипте:
internet@linux-surfer /etc/init.d $ cat dram.sh
#!/bin/sh
# give this script permissions:
# chmod +x sdmem.sh
# sdmem will delete data which may lie still in your memory (RAM)
# The secure data deletion process of sdmem goes like this:
# * 1 pass with 0x00
# * 5 random passes. /dev/urandom is used for a secure RNG if available.
# * 27 passes with special values defined by Peter Gutmann.
# * 5 random passes. /dev/urandom is used for a secure RNG if available.
sdmem -fllv
sdmem -fllv
sdmem -fllv
sdmem -fllv
sdmem -fllv
sdmem -fllv
sdmem -fllv
sdmem -fllv
sdmem -fllv
# this script need to be added to shutdown this way:
#sudo cp sdmem.sh /etc/init.d
#sudo ln -s /etc/init.d/sdmem.sh /etc/rc0.d/K11dram.sh
#sudo ln -s /etc/init.d/sdmem.sh /etc/rc6.d/K11dram.sh
Разрешения:
internet@linux-surfer /etc/init.d $ ls dram.sh -l
-rwxr-xr-x 1 internet internet 743 2012-02-18 00:31 dram.sh
Upstart скрипт:
internet@linux-surfer /etc/init $ cat dram.conf
start on runlevel [06]
script
sdmem -fllv
end script
internet@linux-surfer /etc/init $
Разрешения:
internet@linux-surfer /etc/init $ ls -l dram.conf
-rw-r--r-- 1 root root 55 2012-02-18 01:35 dram.conf
Проблема в том, что ваш скрипт будет работать с остальной частью процедуры выключения / перезагрузки.
start on runlevel [06]
Событие уровня запуска ничего не задерживает, так что у вас есть гонка ... событие является просто сигналом во времени, и поэтому ваш sdmem запускается, как только завершается последовательность выключения в /etc/rc0.d/ * начинает работать, и они оба работают параллельно.
Если вы хотите отложить вещи, у вас есть два варианта. Либо a)
task
start on starting rc RUNLEVEL=[06]
Это задержит полное отключение даже от запуска, пока ваш sdmem не выйдет. Обратите внимание, что там важна «задача», так как задание не будет блокировать другие задания до выхода из sdmem.
b)
task
start on some-other-late-hook-event
И затем отредактируйте любой скрипт в /etc/rc0.d/* (или /etc/rc6.d/*), который вы хотите, чтобы сгенерировать это событие и заставить его делать [ 119]
initctl emit some-other-late-hook-event
Этот вызов в любом скрипте, в котором вы его хотите, будет блокироваться до выхода из sdmem. Снова отметьте «задачу».