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_keys
de 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_id
for especificado: O arquivo.profile
do usuário será atualizado inserindo a definição da variável de ambiente. - Se
user_id
não for especificado: O arquivo/etc/environment
será 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.