Executando binário setuid temporariamente sem setuid?

7

Atualmente configurando xpra, que deseja executar uma instância X como não-raiz usando o driver simulado, mas o binário do sistema Xorg é SUID. Como o sistema atualiza automaticamente, eu preferiria não fazer e manter uma cópia não-SUID do binário. Eu também estou tentando evitar o uso de um hack como copy-execute-delete, por exemplo no diretório tmp (preferiria torná-lo um one-liner limpo, que instintivamente acredito que deveria ser possível, embora possa haver algum furo de segurança sutil que essa capacidade abriria). Os links simbólicos seriam aceitáveis, embora a AFAIK não forneça recursos de mascaramento de bit de permissão.

Minha melhor solução atual é uma montagem de ligação nosuid no diretório bin, o que parece fazer o truque, mas como acima eu ainda prefiro uma solução que não deixe crunk no meu sistema tree / fstab (por exemplo, alguma mágica variável de ambiente que desativa suid da mesma forma que uma montagem nosuid faz, ou alguma linha de comando executa jutsu que ignora o mecanismo suid).

Alguma opinião?

    
por user22839 02.09.2012 / 13:57

2 respostas

3

Se X estiver vinculado dinamicamente, você pode chamar o vinculador dinâmico como:

/lib/ld.so /path/to/X

(adapte ld.so ao seu sistema (como /lib/ld-linux.so.2 ).

Exemplo:

$ /lib64/ld-linux-x86-64.so.2 /bin/ping localhost
ping: icmp open socket: Operation not permitted
    
por 02.09.2012 / 21:25
2

Se você tem strace e ele é não setuid para root, então

strace -e '!all' program_name [argument(s)]

deve funcionar. strace (1) diz (sob BUGS):

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

porque seria um problema de segurança se um usuário não privilegiado puder rastrear um programa setuid (porque o rastreamento permite examinar e modificar a memória do processo). Mas também, em uma seção especial chamada SETUID INSTALLATION, Hedges o acima um pouco:

If strace is installed setuid to root, then ... setuid and setgid programs will be executed and traced with the correct effective privileges.  ... only users trusted with full root privileges should be allowed to do these things, ...

Portanto, se strace for instalado como setuid para root, o truque acima não funcionará. Mas isso geralmente não deveria ser o caso. E, mesmo que seja, você pode contornar isso fazendo uma cópia privada, não SUID, de strace . (Estou pensando que, mesmo se /bin/strace for atualizado automaticamente, você não deve precisar para atualizar sua cópia privada.

Quanto ao comando, -e informa a strace quais e ventilam para rastrear. -e all significaria "rastrear todos os eventos" (que é o padrão), então -e '!all' significa nenhum traço. 1 Isso deve fazer com que strace efetivamente faça nada além de aguardar e assistir como seu programa (o programa X) é executado. Se ele produzir uma saída indesejada, redirecione a saída para /dev/null . (Isso pressupõe que você não precisa ver a saída do console do servidor X.)

por 03.07.2015 / 03:10