Setuid, o bit SUID não fornece privilégios de root

3

Eu escrevi e compilei um programa curto para permitir que qualquer usuário altere o conteúdo do meu arquivo /sys/class/backlight/intel_backlight/brightness , mas não consigo escalar suas permissões. O que eu poderia estar perdendo?

#include <stdio.h>
#include <stdlib.h>
#define FILENAME "/sys/class/backlight/intel_backlight/brightness"

int main (int argc, char * argv[])
{
    int res;
    setuid(0); // I didn't intend to keep this, but I included it just in case
    printf("euid %d\n", geteuid());
    system("whoami");
    // Attempt to open FILENAME; print "Can't open..." on failure
}

Ainda, whoami retorna consistentemente exampleuser em vez de root , e o programa falha consistentemente em abrir o arquivo de saída.

Compilei e configurei o bit uid e depois executei o programa:

$ gcc -o example.bin example.c     # compile
$ sudo chown root:root example.bin # set owner & group
$ sudo chmod 4770 example.bin      # set uid bit
$ ./example.bin 75                 # execute
euid 1000
exampleuser
Can't open output file /sys/class/backlight/intel_backlight/brightness

O arquivo de saída de destino existe:

$ ls -l /sys/class/backlight/intel_backlight/brightness
-rw-r--r-- 1 root root 4096 May  2 07:57 /sys/class/backlight/intel_backlight/brightness

Estou executando o Ubuntu 14.04 LTS

    
por JellicleCat 02.05.2015 / 21:55

1 resposta

1

O sistema de arquivos não suporta executáveis setuid (porque é montado com a opção nosuid , ou porque é um sistema de arquivos FUSE montado por um usuário não-root), ou há uma estrutura de segurança como SELinux ou AppArmor que impede setuid aqui (eu não acho que o Ubuntu configure algo assim embora). Isso, ou você não executou esses comandos - você tornou o arquivo não executável por outros, então eles só funcionariam se você estivesse no grupo root , o que você não deveria ter.

Esta não é uma boa maneira de fazer isso de qualquer maneira. É muito mais simples alterar as permissões no arquivo.

chgrp users /sys/class/backlight/intel_backlight/brightness
chmod g+w /sys/class/backlight/intel_backlight/brightness

Use um grupo do qual você seja um membro, se você não for membro do grupo users .

Adicione esses comandos a /etc/rc.local ou outro script que seja executado perto do final da seqüência de inicialização.

    
por 02.05.2015 / 23:07