melhores práticas Linux web front-end
-
11-07-2019 - |
Pergunta
Eu quero construir um front-end baseado na web para gerenciar / administrar minha caixa de Linux. Por exemplo. Eu quero ser capaz de adicionar usuários, gerenciar o sistema de arquivos e todos esses tipos de coisas. Pense nisso como um clone cPanel mas mais para administrador do sistema antes que web de administração.
Eu estava pensando sobre a criação de um serviço que é executado em minha caixa e que executa todas as tarefas níveis do sistema. Dessa forma eu posso ter uma separação clara entre a minha base front-end web e a lógica real. As páginas de servidor pode do que fazer chamadas para minhas tarefas do servidor ou fila especializados dessa forma. No entanto, eu não tenho certeza se isso seria a melhor maneira de fazer isto.
Eu acho que outra questão importante seria, como eu iria lidar com a segurança ao construir algo assim?
PS:. Isto apenas como um projeto de estimação e experiência de aprendizagem para que eu não estou interessado em soluções existentes que fazer uma coisa semelhante
Solução
Tenha o serviço especializado daemon rodando como um usuário diferente - vamos chamá-lo 'managerd'. Configure o seu arquivo / etc / sudoers para que 'managerd' pode executar os vários comandos que você quer que ele seja capaz de executar, como root, sem senha.
Ter o web server soltar arquivos "gatilho" que contêm os comandos para executar em um diretório que é o modo de '770' com um grupo que apenas o usuário do servidor web e 'managerd' são membros. Certifique-se de que 'managerd' verifica que os arquivos têm a propriedade correcta antes de executar o comando.
Certifique-se de que o lado da interface web é bloqueado - executá-lo através de HTTPS somente, exigir autenticação, e se possível, colocar em ACLs específicas do IP, de modo que você só pode acessá-lo a partir de locais conhecidos, com antecedência.
Outras dicas
A sua solução parece ser uma solução muito sensível à questão 'root'.
Os pares de sugestões:
- Encadernação o 'serviço especializado' para localhost assim ajudaria a garantia de que os pedidos não podem ser feitas externamente.
- Verificar funções solicitação de chamada que executam as ações e não dão diretamente o serviço de acesso irrestrito completo. Então chamar uma função "addToGroup (usuário, grupo)" em vez de um genérico "performAction (comando)".