Linux Sinalizador de permissão especial setuid com leitura / gravação

0

O setuid é aplicável apenas para o arquivo de execução (aplicável apenas com flags executáveis)?

Como isso afetará outras permissões (leitura / gravação) do mesmo arquivo!

Por exemplo: - Se a permissão real do arquivo for 4711 , o usuário não proprietário não poderá lê-lo. Por que não está elevando a permissão do proprietário 4711 e permite que outras pessoas leiam o conteúdo.

    
por Vaisakh Rajagopal 04.05.2018 / 08:12

1 resposta

0

Um não proprietário não pode ler o arquivo porque setuid e setgid afetam somente as permissões efetivas quando o arquivo é executado ; caso contrário, as permissões de arquivo serão usadas. Veja um exemplo de programa para tentar:

readme.c

#include <stdio.h>

int main(int argc, char **argv) {
  FILE *f;
  int i;
  char c;

  if(argc>1) {
    f=fopen(argv[1],"rb");
    for(i=1; i++<100;) {
      c=getc(f);
      printf("%x%s", (int)c, i%50?" ":"\n");
    }
    fclose(f);
  }
}

Compile e altere suas permissões como alguém diferente de com quem você deseja testar (usei root ):

# gcc -Wall -o readme readme.c
# chown root:root readme
# chmod ug+s,o-rw readme

Verifique as permissões e tente ler o arquivo como seu usuário de teste:

erik ~ $ ls -la readme
-rwsr-s--x 1 root root 8064 May  4 12:05 readme
erik ~ $ cat readme
cat: readme: Permission denied

Agora, tente executar o programa e leia-o:

erik ~ $ ./readme readme
7f 45 4c 46 2 1 1 0 0 0 0 0 0 0 0 0 3 0 3e 0 1 0 0 0 fffffff0 5 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 18 0 0 0 0 0 0 0
0 0 0 40 0 38 0 9 0 40 0 1d 0 1c 0 6 0 0 0 4 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 fffffff8 1 0

Você verá que não teve problemas, porque as permissões efetivas foram alteradas para um usuário com permissões de leitura.

Por que isso acontece? Várias razões vêm à mente. Primeiro, não há necessidade real de alguém ter permissões de leitura para executar um executável porque o kernel (que carrega o programa) tem permissões completas para fazer qualquer coisa já. Você só precisa ter permissões de leitura se quiser ver o conteúdo do arquivo executável, geralmente para poder copiar o arquivo. É possível, para citar alguns exemplos possíveis, que o executável tenha dados confidenciais que os usuários não devem ver (o que é strongmente desencorajado, mas aconteceu!) Ou o sistema está usando isso como uma defesa em profundidade para impedir que as pessoas encontrem exploits.

    
por 04.05.2018 / 20:19