我正在开发一款基于 Ubuntu 的浏览器发行版,该发行版旨在实时运行。安全解决方案的一部分是在关闭时使用 sdmem。sdmem 会清除可用内存,可在 Ubuntu 存储库中的 secure-delete 包中找到。以下脚本中未调用 sdmem。
我曾将此解决方案用于以相同方式设置的另一个项目,所以我知道它有效。但有时在关闭和重新启动其他项目时,我并不总是能获得 sdmem 在擦除时提供的标准输出。(通常 sdmem 会吐出一堆星号。)我已禁用图形 plymouth,以便我可以查找输出。
这是我的脚本信息:
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
新贵脚本:
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
答案1
问题是您的脚本将与其余的关机/重启过程发生冲突。
start on runlevel [06]
运行级别事件不会延迟任何事情,因此您需要进行一场比赛..该事件只是一个时间信号,因此只要 /etc/rc0.d/* 中的关闭序列开始运行,您的 sdmem 就会开始运行,并且它们并行运行。
如果你想拖延事情,你有两个选择。要么 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/*)中您想要发出此事件的任何脚本并让它执行
initctl emit some-other-late-hook-event
无论您希望在哪个脚本中调用该调用,它都会阻塞,直到 sdmem 退出。请再次注意“任务”。