porque setuid é setado em vez de dar privilégios a outros

1

Supondo que o usuário normal deseje atualizar sua senha em /etc/passwd .

Por que é preferível definir o Setuid como -rws------ . Estou assumindo que funciona da mesma forma como se os outros usuários recebessem esses privilégios de uma maneira como -rwx---rwx .

Corrija-me se estiver errado, porque talvez eu não entenda esse conceito e, portanto, gostaria que alguém explicasse isso para mim.

    
por Rvfvl 15.01.2018 / 22:59

3 respostas

3

O bit setuid (o s in -rws------ ) significa que sempre que o programa é executado, o processo criado empunha os poderes do usuário que possui o arquivo de programa . Se admin possuir o arquivo e john executá-lo, o processo resultante será executado com o ID de usuário efetivo de admin . (Embora ainda carregue john como o ID do usuário "real"). A idéia é que admin pode fazer algo que john ou um usuário comum não pode, mas o programa ainda pode fazer verificações adicionais para controlar o que usuário tenta fazer.

Com as permissões acima, o bit setuid não faz sentido, já que ninguém além do proprietário pode executar o programa.

Com -rwx---rwx de permissões, qualquer pessoa que não seja membro do grupo do arquivo pode executar o arquivo, mas o faz com seu próprio ID de usuário. Eles não recebem nenhum direito adicional através do programa.

    
por 16.01.2018 / 00:06
2

A chave aqui é que /etc/passwd é um arquivo protegido. Não deve ser editável para ninguém além dos administradores. No meu Debian é -rw-r--r-- . Não está claro em sua pergunta com o que o SUID se relaciona. De maneira alguma faria sentido para /etc/passwd . Isso só faria sentido para um programa que poderia mudar /etc/passwd . Mas agora, -rws------ não faz muito sentido para esse arquivo de programa, como ikkachu explicou acima. -rws---r-x faria sentido, pois um usuário comum poderia executá-lo. Ainda assim, lembre-se que /etc/passwd é um arquivo protegido e essa proteção deve ser levada em consideração ao gravar o executável que fará a alteração. O sticky bit não se aplica a linguagens de script por razões de segurança, a propósito.

    
por 16.01.2018 / 19:26
2

Para alterar sua própria senha, o usuário precisa de alguma forma obter o novo hash de senha gravado em /etc/shadow (ou /etc/passwd em sistemas legados sem implementação de senha de sombra).

Se o usuário tiver permissão para gravar o acesso ao arquivo, o usuário poderá alterar qualquer item desse arquivo: o usuário poderá alterar as senhas de alguém , representar qualquer usuário e obter acesso root. Isso claramente não é aceitável.

A solução é um "gatekeeper" que tem o poder de permitir que o usuário execute um ato específico com acesso no nível de raiz, ou seja, alterar somente a senha própria .

O programa /bin/passwd é um desses programas de gatekeeper. Ele é escrito com muito cuidado para garantir que ele permita a alteração da própria senha do usuário, a menos que o usuário seja root (ou, em alguns casos, tenha privilégios extras apropriados). Quando o programa gatekeeper está pronto, suas permissões são definidas para que os usuários possam executá-lo, mas não modificar o conteúdo do programa. Em seguida, a permissão root setuid é adicionada ao programa: faz com que qualquer processo que execute esse programa específico tenha acesso root somente para a duração desse processo específico .

Às vezes, as permissões dos programas-raiz do setuid são definidas como 4111, ou ---s--x--x , de modo que os usuários não-root só podem executar o programa, mas não ler seu conteúdo de outra maneira.

Existem algumas proteções para programas setuid que são incorporados ao sistema operacional: por exemplo, você não pode anexar um depurador a um processo que esteja executando um programa raiz setuid, a menos que você seja root. E se um programa setuid for legível por usuários comuns e um usuário tentar fazer uma cópia desse programa, a cópia geralmente perderá o bit de permissão setuid; e mesmo que isso não ocorresse, a cópia será (normalmente) de propriedade do usuário que fez a cópia, de modo que não será mais setuid root , mas setuid , e muito provavelmente não pode fazer o seu trabalho de qualquer maneira.

    
por 28.01.2018 / 18:25