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á:
- Criar novos usuários;
 - Excluir usuários;
 - Adicionar chaves SSH públicas ao
            
authorized_keysde usuários; - Configurar variáveis de ambiente nos servidores.
 
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
}- Se 
user_idfor especificado: O arquivo.profiledo usuário será atualizado inserindo a definição da variável de ambiente. - Se 
user_idnão for especificado: O arquivo/etc/environmentserá atualizado inserindo a definição da variável de ambiente. 
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:
- Membros comuns (
member) só podem gerenciar suas próprias contas de usuários para evitar que tenham acesso à contas de outros membros. - Membros comuns (
member) não podem definir os grupos aos quais pertecem porque isso poderia ser usado para a obtenção de privilégios administrativos, uma vez que alguns grupos (como osudo) permitem esse tipo de privilégio. - Membros comuns (
member) não podem obter privilégios root — ou acesso a outras contas de usuários —, a menos que um administrador (administrator) configure a conta de usuário dele o colocando no gruposudo. 
É de suma importância que esses aspectos de segurança sejam estritamente seguidos, afim de garantir a confiabilidade nos acessos cedidos aos membros.