Um processo de superusuário pode alterar o ID do usuário real e o ID do grupo de um processo, não correspondendo aos do arquivo de senhas?

10

De APUE

The real user ID and real group ID of a process identify who we really are. These two fields are taken from our entry in the password file when we log in. Normally, these values don’t change during a login session, although there are ways for a superuser process to change them

Um processo de superusuário pode alterar o ID do usuário real e o ID do grupo real de um processo, para que a relação entre o ID do usuário real e o ID do grupo real não corresponda àqueles no arquivo de senhas? Por exemplo, se o usuário Tim não for membro do grupo ocean pelo arquivo de senha, um processo de superusuário pode alterar o ID do usuário real e o ID real do grupo de um processo para Tim e ocean , respectivamente?

    
por Tim 03.09.2018 / 23:47

3 respostas

14

Sim, um processo de superusuário pode alterar seu ID de usuário real e ID de grupo real para qualquer valor que desejar. Os valores em /etc/passwd e /etc/shadow são a configuração para quais valores devem ser definidos, mas não uma limitação de valores possíveis.

Editar # 1

Isso significa que programas como login lerão os valores dos arquivos, portanto, os arquivos são arquivos de configuração ou de entrada. Eles não são restrições sobre o que um programa pode fazer. Um processo de superusuário pode passar qualquer valor para o kernel, e o kernel não irá verificar nenhum arquivo.

Um programa poderia chamar

setgid (54321);
setuid (12345);

e isso funcionaria, mesmo que nenhum dos id seja mencionado em qualquer arquivo.

    
por 04.09.2018 / 00:21
9

O arquivo de senha e o arquivo de grupo não são lidos, eles são lidos apenas pelo processo de login, para definir o ID do usuário real e o ID do grupo real.

Não há nada no kernel mencionando esses arquivos. O login precisa abrir os arquivos, processá-los e definir os dois IDs. Poderia ser escrito de forma diferente para obter esses IDs de outro lugar. Por exemplo. de um banco de dados em rede.

Qualquer processo com capacidade CAP_SETUID pode definir esses IDs, o root tem esse recurso.

O modelo de segurança no Unix é parcialmente implementado no kernel e parte é implementado em processos executados com recursos elevados (por exemplo, como root).

Observe que /etc/passwd e /etc/group também são lidos por ls , ps e qualquer outro programa que precise converter nomes de usuários / grupos para / de IDs de usuário / grupo. (Eles podem fazer isso através de uma biblioteca, do que saber sobre métodos alternativos de armazenar esses detalhes.)

    
por 04.09.2018 / 00:43
3

Entre outras coisas, o objetivo de /etc/passwd é traduzir o nome do usuário para o UID do usuário. Se você não se importa com o UID do bob, você não precisa desse arquivo. Se você quiser apenas mudar para um UID / GID arbitrário, use os syscalls relevantes:

int setuid(uid_t uid);
int setgid(gid_t gid);

Observe que um processo privilegiado com os recursos CAP_SETUID e CAP_SETGID (que geralmente tem um processo raiz) só pode alterar seu próprio UID e GID, não o de outro processo em execução.

    
por 04.09.2018 / 10:03