suid bit no SuSE não tem efeito no system () [duplicate]

1

[EDIT: revisitando esta pergunta e vendo que ela ainda está marcada incorretamente como duplicada] A pergunta a seguir sobre SE não é uma duplicata quando se pergunta sobre a execução do bash com o bit suid, que é um caso especial e não funciona de forma alguma: O bit setuid parece não ter efeito sobre o bash A primeira diferença é que no meu exemplo eu executo o whoami, não o bash. A segunda diferença é que ele funciona como esperado no Ubuntu, mas não no SuSE.

Suid bit funciona bem no meu PC rodando Ubuntu, mas não em uma instância de teste do SLES. O sinalizador nosuid não está configurado no sistema de arquivos xfs montado na máquina SLES. ls mostra que em minha máquina e no servidor SLE, as mesmas permissões são definidas para o executável. Então, por que o executável ainda é executado como o usuário atual em vez de como o proprietário?

execsudo.c:

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]) {
    system(argv[1]);
    return 0;
}

bash:

gcc -o setuid-test execsudo.c ;
sudo chown nobody ./setuid-test;
sudo chmod +s ./setuid-test;
./setuid-test "whoami" 
# Outputs current user instead of nobody

[EDIT 2] Ainda não resolvi o problema, mas suponho que seja porque a máquina SuSE é uma VM. Uma solução alternativa pode ser configurar esse comportamento via / etc / sudoers.

    
por phobic 19.08.2016 / 16:20

1 resposta

0

O setuid pode "funcionar", mas é facilmente detectado e desfeito posteriormente. Eu comparei isso com um programa similarmente intencionado sue , que uso localmente em uma conta alternativa dickey (nomeando o programa dickey ).

No meu sistema Debian 7, eu recebo esta saída (a sua é "foo"):

$ ./foo id;dickey id
uid=1001(tom) gid=100(users) euid=1006(dickey) egid=50(staff) groups=100(users),27(sudo)
uid=1006(dickey) gid=100(users) groups=100(users),27(sudo)

No meu OpenSUSE 13, recebo algo diferente:

$ ./foo id;dickey id
uid=1000(thomas) gid=100(users) groups=100(users),10(wheel)
uid=1003(dickey) gid=100(users) groups=100(users),10(wheel)

A razão para a diferença é que o seu programa não define os valores de uid / gid real para corresponder aos valores de uid / gid effective e um programa útil (talvez apparmor) está retirando as permissões indesejadas.

Isso ainda não é uma solução perfeita (eu tenho um item de tarefa para o CentOS 7, onde outro programa útil interfere nos programas setuid). Mas deve apontar na direção certa.

Leitura adicional:

por 20.08.2016 / 01:57