Acabei de encontrar esta reimplementação de chroot baseada em ptrace: PRoot .
A função bind é exatamente o que eu estava procurando!
Isso é mais confiável do que substituir strings no executável + pode ser facilmente usado em scripts ...
Gostaria de substituir alguns caminhos codificados armazenados em executáveis pré-compilados como "/ usr / share / nmap /" e redirecioná-los para outro diretório.
Minha solução ideal não deve exigir privilégios de root, portanto, criar um link simbólico não é aceitável.
(Também recompilando não é uma opção)
Acabei de encontrar esta reimplementação de chroot baseada em ptrace: PRoot .
A função bind é exatamente o que eu estava procurando!
Isso é mais confiável do que substituir strings no executável + pode ser facilmente usado em scripts ...
perl -pe 's:/usr/share/nmap/:/other/dir/nmap/:g
' /path/to/executable > new-executable
/other/dir/nmap
deve ter o mesmo comprimento que /usr/share/nmap
. Você pode preencher com /
caracteres, se não:
perl -pe 's:/usr/share/nmap/:/other//////dir/:g
' /path/to/executable > new-executable
O novo caminho não pode ser mais longo. Você sempre tem a opção de criar links simbólicos em /tmp
se isso for um problema.
Referência @ resposta do slm ...
Uma terceira maneira de fazer isso pode ser criar um ambiente de sandbox com chroot para executar o executável no qual tudo que não seja os executáveis que você deseja remapear é direcionado para a coisa real. Mas seria complicado.
Mas aconselho que você pegue o código-fonte e recompile. (Ou se este é um código proprietário, pagando ao fornecedor para girar alguns executáveis personalizados ...)
O que fiz em uma vida anterior foi cuidadosamente editar um executável para substituir strings (a substituição deve ser mais curta, preencher com zero caracteres!), usando um editor binário (por exemplo, hexl-mode
em emacs / xemacs).
Se um executável contiver caminhos fixos, eles podem frequentemente ser substituídos por variáveis de ambiente (como TMPDIR, EDITOR / VISUAL ou similar) ou fornecendo argumentos apropriados. Quando o caminho é realmente fixo, eu perguntaria a razão por trás disso. Pode haver explicações de segurança ou configuração, que não devem ser substituídas. Claro, pode ser apenas preguiça , mas isso é improvável com o software empacotado pela sua distribuição e presumivelmente controlado. .
Existem apenas dois métodos que eu conheço onde você poderá realizar algo assim.
O primeiro envolve a criação de um link no local que foi codificado no executável. Assim, no seu exemplo, um link precisaria ser criado em /usr/share/nmap/
re-apontando para qualquer outro local desejado. Essa abordagem exigirá privilégios de root e exigirá o uso de links simbólicos nesse local.
O segundo método envolveria o uso de um editor hexadecimal onde você iria para os executáveis pré-compilados e alteraria cirurgicamente os binários adicionando seus próprios caminhos ao invés daqueles pré-compilados.
Tags executable sandbox portability