Por que os bits de modo S_ISUID e S_ISGID foram limpos quando o proprietário ou grupo de um arquivo executável é alterado por um usuário não privilegiado

1

Eu estava lendo a página man de chown . Eu não entendo porque o modo S_ISUID e S_ISGID deve ser limpo quando a função retornar com sucesso.

    
por user54142 08.10.2014 / 09:45

2 respostas

2

Acho que você está apontando para isso na página man:

When the owner or group of an executable file are changed by an unprivileged user the S_ISUID and S_ISGID mode bits are cleared.

Então, por que eles estão limpos agora? Você vê que eles são limpos apenas no caso de um arquivo executável . Porque quando um dos bits (SUID / SGID) é definido, o usuário sem privilégios pode executar o arquivo como o novo proprietário do arquivo. Isso seria uma enorme falha de segurança.

    
por 08.10.2014 / 10:49
1

Acho que você leu incorretamente man 2 chown : você não precisa limpar S_ISUID e S_ISGID , eles serão automaticamente limpos quando você usar essa função como um usuário sem privilégios. Se o seu programa está rodando como root , o comportamento (no Linux) depende da versão do kernel.

Se você precisar dos bits definidos, basta reaplicá-los (assumindo que a conta que tenta configurá-los tem os privilégios para fazer isso).

Da página do manual:

  When  the  owner  or  group  of  an  executable file are changed by an
  unprivileged user the S_ISUID  and  S_ISGID  mode  bits  are  cleared.
  POSIX  does not specify whether this also should happen when root does
  the chown(); the Linux behavior depends on  the  kernel  version.   In
  case  of  a non-group-executable file (i.e., one for which the S_IXGRP
  bit is not set) the S_ISGID bit indicates mandatory  locking,  and  is
  not cleared by a chown().
    
por 08.10.2014 / 10:34