comando sudo não funciona quando strace está conectado com o PID do bash

1

Estou tomando logs de comando executados pelo usuário em um arquivo de saída, anexando o PID de BASH em strace .

$ strace -q -f -e execve -p $$ -o <outputFile>

Ele está funcionando bem e estou recebendo todas as listas de comandos no arquivo de saída.

Mas enfrento outro problema. Não consigo executar o comando sudo quando strace está anexado ao BASH PID.

Estou recebendo o erro abaixo:

sudo: effective uid is not 0, is sudo installed setuid root?

Eu verifiquei que setuid está definido em sudo binary

---s--x--x. 1 root root 123832 Mar 22 11:35 /usr/bin/sudo

sudo está funcionando bem quando eu paro strace .

Isso é um bug ou há algum motivo técnico? Por favor me ajude nisso.

    
por Sourav 16.06.2017 / 11:16

2 respostas

1

Existem outras maneiras de registrar todos os comandos executados por um usuário. Com sysdig instalado, pode-se executar algo como

# sysdig "user.name = jdoe and evt.type = execve"

para registrar todas as chamadas execve(2) por jdoe ; a opção -p para sysdig pode personalizar o formato de saída, etc.

Outra maneira seria usar SystemTap , que tem a vantagem de ser suportado pelo RedHat; aqui assumimos jdoe tem um UID de 1000 ;

probe begin {
    printf("begin trace...\n\n")
}

probe syscall.execve.return {
    if (uid() != 1000) next;
    printf("runs %s[%d]: %s\n", execname(), pid(), cmdline_str());
}

isso pode ser executado por meio de algo como

# stap-prep
...
# stap whatyousavedtheaboveas.stp

Ambos os métodos provavelmente exigirão ajustes para capturar exatamente o que você precisa, lidar com condições de erro em que um execve falha, etc. No lado positivo, sysdig e SystemTap são muito mais eficientes que strace (run vmstat 1 e observe como strace envia interrupções de contexto no telhado durante a execução).

    
por 16.06.2017 / 16:45
2

O manual para strace menciona que:

BUGS
Programs that use the setuid bit do not have effective user ID privileges while being traced.

Embora eu suspeite que tenha mais a ver com as implicações de segurança da depuração de um processo setuid, do que um bug. Se não me engano, strace usa a mesma interface de rastreamento como, por exemplo, gdb , e permite, entre outras coisas, modificar a memória do processo em execução. Ser capaz de fazer isso com um processo que é executado com mais privilégios do que você deveria ter, seria  uma má ideia.

    
por 16.06.2017 / 11:21