Jobs Upstart e scripts init.d não iniciam

0

Estou trabalhando em uma distribuição de navegador baseada no Ubuntu que deve ser executada ao vivo. Parte da solução de segurança é usar o sdmem quando ele é desligado. O sdmem limpa o RAM disponível e é encontrado no pacote secure-delete em repositórios do Ubuntu. O sdmem não está sendo chamado nos scripts abaixo.

Eu tive esta solução trabalhando para outro projeto configurado da mesma maneira, então eu sei que funciona. Mas às vezes no outro projeto no desligamento e reinício eu nem sempre recebo o padrão que o sdmem dá ao limpar. (Normalmente sdmem cospe um monte de asteriscos.) Eu desabilitei o plymouth gráfico para que eu possa procurar a saída.

Estas são as informações do meu script:

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

Permissões:

internet@linux-surfer /etc/init.d $ ls dram.sh -l
-rwxr-xr-x 1 internet internet 743 2012-02-18 00:31 dram.sh

Script Upstart:

internet@linux-surfer /etc/init $ cat dram.conf 
start on runlevel [06]

script
    sdmem -fllv
end script
internet@linux-surfer /etc/init $ 

Permissões:

internet@linux-surfer /etc/init $ ls -l dram.conf 
-rw-r--r-- 1 root root 55 2012-02-18 01:35 dram.conf
    
por bambuntu 18.02.2012 / 08:49

1 resposta

2

O problema é que seu script vai correr com o restante do procedimento de desligamento / reinicialização.

start on runlevel [06]

O evento de runlevel não atrasa nada, então você tem uma corrida .. o evento é apenas um sinal no tempo, e assim o seu sdmem começa a rodar assim que a sequência de shutdown em /etc/rc0.d/* começa a rodar e ambos correm em paralelo.

Se você quiser atrasar as coisas, você tem duas opções. Ou a)

task
start on starting rc RUNLEVEL=[06]

Isso atrasará todo o encerramento, desde o início até o sdmem sair. Observe que a "tarefa" é importante, pois o trabalho não bloqueará outros trabalhos até que o sdmem saia.

b)

task
start on some-other-late-hook-event

E edite qualquer script em /etc/rc0.d/* (ou /etc/rc6.d/*) que você queira emitir este evento e faça-o

initctl emit some-other-late-hook-event

Essa chamada em qualquer script que você quiser, bloqueará até o sdmem sair. Observe novamente a 'tarefa'.

    
por SpamapS 20.02.2012 / 09:42