Usuários

Em adição aos recursos de gerenciamento de servidores Linux de nossa plataforma, vamos adicionar um módulo para o gerenciamento de usuários e variáveis de ambiente. Em uma visão geral, o módulo permitirá:

Afim de garantir a segurança, membros sem privilégios administrativos não poderão criar ou modificar os usuários de outros membros, sendo unicamente capaz de adicionar e configurar um usuário para uso próprio.


Na API, os seguintes endpoints serão adicionados para gerenciamento de usuários:

POST /servers/{server_id}/users

Cria um novo usuário no servidor. Somente membros administradores podem usar o campo groups. Membros comuns não podem personalizar os grupos para os quais o usuário dele pertence.

Por padrão, o usuário criado só pertencerá ao grupo padrão criado de mesmo nome que o usuário.

Exemplo de request:

{
    "username": "john",
    "password": "12345passwd",
    "groups": "sudo"
}

Obs.: Quando um usuário é adicionado ao grupo sudo, uma nova entrada no /etc/sudoers é adicionada para que o usuário possa executar comandos com privilégios root.

GET /servers/{server_id}/users

Lista os usuários criados para o servidor.

GET /users/{user_id}

Obtém os detalhes do usuário de um servidor.

PUT /users/{user_id}

Altera as configurações da conta de um usuário no servidor. Somente usuários administradores podem usar esse endpoint.

Exemplo de request:

{
    "password": "12345passwd",
    "groups": "sudo"
}

Obs.: Quando um usuário é adicionado ao grupo sudo, uma nova entrada no /etc/sudoers é adicionada para que o usuário possa executar comandos com privilégios root.

DELETE /users/{user_id}

Exclui um usuário do servidor. Se o membro não for administrador, ele só pode excluir usuários criados por ele.

POST /users/{user_id}/authorized-keys

Adiciona uma nova chave SSH pública como chave autorizada a se conectar na conta do usuário. Se o membro não for administrador, ele só pode adicionar essa chave à um usuário que ele mesmo criou.

Exemplo de request:

{
    "name": "John's laptop",
    "public_key": "..."
}

GET /users/{user_id}/authorized-keys

Lista as chaves autorizadas a se conectarem na conta desse usuário no servidor. Se o membro não for administrador, ele só pode listar as chaves de um usuário criado por ele.

DELETE /authorized-keys/{authorized_key_id}

Exclui uma chave. Se o membro não for administrador, ele só pode excluir chaves criadas por ele.


Na API, os seguintes endpoints serão adicionados para o gerenciamento de variáveis de ambiente em um servidor:

POST /servers/{server_id}/environment-variables

Cria uma nova variável de ambiente global (aplica à todos os usuários) ou para um usuário específico.

Exemplo de request:

{
    "name": "APP_PATH",
    "value": "/var/www/myapp",
    "user_id": 12345
}

GET /servers/{server_id}/environment-variables

Lista as variáveis de ambiente criadas no servidor.

GET /environment-variables/{environment_variable_id}

Obtém detalhes de uma variável de ambiente específica.

PUT /environment-variables/{environment_variable_id}

Atualiza uma variável de ambiente.

Exemplo de request:

{
    "name": "APP_PATH",
    "value": "/var/www/myapp"
}

Obs.: Não é possível atualizar o campo user_id.


É prudente apontar alguns aspectos de segurança importantes que devem ser levados em consideração durante a implementação desses endpoints:

É de suma importância que esses aspectos de segurança sejam estritamente seguidos, afim de garantir a confiabilidade nos acessos cedidos aos membros.