Determina qual versão de um binário está atualmente em execução

3

Temos diferentes caixas incorporadas distribuídas ao redor do mundo rodando o TI Arago Linux e cada caixa tem um aplicativo específico (vamos chamá-lo de binary ) rodando nele. Deste binary existem várias versões compiladas espalhadas pelo servidor, como na caixa há sempre apenas uma em /app/binary .

O problema é que, embora possamos identificar com um hash md5 que binary está instalado na caixa, não podemos determinar qual versão está sendo executada atualmente.

14407 root      2880 S    /app/binary

Existe uma maneira comum de determinar qual versão de binary está sendo executada com base, por exemplo, no hash md5 do binário?

    
por marc 24.01.2017 / 14:31

2 respostas

4

No Linux, você sempre pode encontrar o conteúdo de um executável atualmente em execução explorando o seu diretório em /proc (contanto que você tenha a permissão apropriada). O arquivo /proc/14407/exe é um link simbólico “mágico”; você sempre pode ler seu conteúdo, mesmo que o link pareça pendente (por exemplo, porque o executável foi excluído). Assim, você pode identificar o binário em execução no momento com md5sum /proc/14407/exe , se a soma de verificação MD5 permitir identificar a versão.

    
por 25.01.2017 / 02:13
0

Existem muitas maneiras de lidar com isso. No entanto, se você tiver o PID do processo em execução, usaria lsof .

No seu exemplo, para o PID 14407 pertencente ao usuário root, você pode fazer o seguinte para mostrar todos os arquivos abertos para esse processo:

lsof -p 14407

Isso mostrará todos os arquivos abertos. Um desses arquivos deve ser o próprio binário. Você pode filtrar essa saída com o grep se souber o caminho em que sua coleção de binários deve residir para simplificar a saída de lsof .

Uma vez que você sabe qual arquivo binário está aberto, quando o processo foi iniciado, você pode MD5 que o arquivo e obter o seu hash do binário real carregado quando foi executado.

No entanto, se o seu binário estava sendo reconstruído em árvore e esse arquivo original foi sobrescrito após ser executado (estou pensando em um longo processo como um daemon) e o binário original poderia ter mudado como resultado de uma nova construção então este método não seria confiável.

    
por 24.01.2017 / 16:15

Tags