Existe uma maneira de usar o checkinstall sem montar / var / tmp como exec?

1

Estou compilando o nginx a partir do código-fonte e queria usar o checkinstall para que ele possa ser desinstalado mais facilmente mais tarde. O problema é que o checkinstall executa scripts em / var / tmp que montei com noexec para evitar escalonamento de privilégios.

eu encontrei esse site que recomenda ligação temporária / var / tmp para um local diferente para permitir a execução de scripts em / var / tmp. Mas isso não causa problemas com processos em execução que usam / var / tmp naquele momento e me tornam vulnerável?

O que me leva à pergunta: existe uma maneira de usar o checkinstall sem montar o / var / tmp como exec? Talvez usando chroot ou não compartilhar?

SilentStorm
fonte

Respostas:

0

Explicação

Pode-se usar o comando unshare para criar um namespace dedicado a um script:

unshare --mount /path/to/script # Execute command in dedicated mount namespace

O script usa seu próprio namespace de montagem. Poderia ser assim:

mount --make-rslave /            # Prevent this mount namespace
                                 # from changing the real namespace
mount --bind /foo/tmptmp foo/tmp # Do the bind
touch /foo/tmp/tmpFile           # Create tmp files
echo $( ls /foo/tmptmp )
echo $( ls /foo/tmp )
#output:
#tmpFile
#tmpFile

Depois que o script é executado usando unshare, vamos ver o que aconteceu com o sistema principal.

ls /foo/tmptmp
#output: tmpFile
ls /foo/tmp
#output: 
#(Note that the file is only present in /foo/tmptmp)
umount /foo/tmptmp
#output: umount: /foo/tmptmp: not mounted
#(Note that the bind did only affect the mount namespace of the script)

Solução

Aplicando isto ao problema da questão, obtém-se o seguinte script que precisa ser chamado via unshare --mount:

mount --make-rslave /
mount --bind /your/tmp/file /var/tmp
checkinstall
SilentStorm
fonte