Mais controle sobre meu servidor local

1

estou executando um servidor clearOS na minha rede local (pequena empresa de 10 desenvolvedores) usamos como um servidor de desenvolvimento para testar nosso trabalho e mostrá-lo aos clientes no processo de teste cada desenvolvedor tem um nome de usuário e senha exclusivos para acessar o ftp / http / smb. o problema é quando um dos desenvolvedores executa um código não seguro (vamos supor que é um código php), como executar um loop infinito! o servidor trava completamente por todos e não consigo identificar quem é o desenvolvedor defeituoso !! como isso pode ser resolvido? obrigado antecipadamente

As informações do meu servidor

  1. servidor clearOS
  2. RAM 16 GB
  3. SSD 1TB (2 partições)

Apps instalados:

  1. proftpd,
  2. gitlab,
  3. apache,
  4. mariadb

Usuários:

  1. usuário raiz físico e
  2. 10 usuários virtuais (usando o ldap) cada usuário tem uma senha exclusiva
por Med Abida 03.10.2016 / 15:21

2 respostas

5

Seu problema (s)

Você declarou seu problema principal como

when one of the developer runs a non safe code (lets assume it is a php code) like running a infinite loop! the server completely crashes for all and im not able to identify who is the the faulty developer!

Como o código de desenvolvimento sempre pode travar ou travar, você está lidando com dois problemas diferentes:

  1. Processos de diferentes usuários não devem interferir uns nos outros e não tomar todos os recursos, deixando os outros famintos ou até mesmo travando o servidor.
  2. Identificando o usuário que "fez".

Se você resolver o segundo problema, ainda precisará resolver o primeiro; mas se você resolve o primeiro, você não precisa mais resolver o segundo, então eu me concentro em resolver o primeiro aqui (também, resolver problemas sem confrontar as pessoas sobre coisas ruins é sempre mais fácil e fica menos confronto).

Soluções possíveis

Você tem três caminhos principais para escolher ao isolar as ações do usuário umas das outras:

  1. Processos e amp; sistema de arquivos: A forma mais simples e mais antiga de separação é fornecer recursos para cada usuário diferente em um sistema UNIX multiusuário.
    • o uptime365 já deu sugestões para ulimit , só quero acrescentar que você precisa garantir que seus aplicativos também usem esses usuários (em vez de usuários de daemon genéricos para cada serviço) e que eles não queiram iniciar processos com outras contas de usuário. Por causa dessa desvantagem, essa abordagem raramente é usada hoje, exceto por coisas simples, como criar scripts sem uma infraestrutura de entrega contínua.
    • As cotas do sistema de arquivos são mais úteis hoje, já que o armazenamento ainda é um recurso principal e funciona com quase todos os aplicativos.
  2. Aplicativos: A maioria dos softwares que você acessa já possui gerenciamento interno de usuários e cotas, mas você precisa gerenciar / configurar separadamente. Por exemplo, o banco de dados pode definir cotas e permissões para cada usuário e limitar o que ele pode fazer . A desvantagem além da configuração diferente (que pode ser unificada por scripts ou aplicativos) é que nem todo software é igualmente bem equipado. Por exemplo, o GitLab ainda parece não suporta cotas de disco . Você terá que avaliar suas causas de erro e ver se os recursos fornecidos são bons o suficiente para o seu caso.
  3. Contêineres & VMs: Aproveitar a virtualização (virtualização completa como KVM ou ESXi; ou conteinerização como Solaris Zones, FreeBSD Jails, Linux LXC ou baseada em aplicativos como Docker et al.) Permite que você apresente a cada usuário um sistema virtual completo onde ele pode fazer qualquer coisa que você permitir, mas limitar seus recursos para que ele não perturbe os outros usuários. É a forma mais avançada de segregação, porque essencialmente cada usuário tem sua própria máquina e não interfere de forma alguma (se configurada corretamente), assim você também tem opções diferentes de configuração e tempo de execução, redes diferentes, discos rígidos diferentes e assim por diante. A desvantagem dessa solução é que ela tem a maior sobrecarga na configuração e no uso de recursos desses três.

Naturalmente, as combinações são sempre possíveis, pois as abordagens funcionam em diferentes camadas. Por exemplo, você poderia usar contêineres para que todos tenham seu próprio servidor da Web, mas permitir que todos usem o mesmo banco de dados para economizar recursos (o acesso ao banco de dados é mais rápido do que com vários bancos de dados diferentes), limitado por cotas de banco de dados.

O que você faz no seu caso?

Como você vê, as possibilidades são muitas e cada uma delas é um esforço considerável para implementar, então você precisa reduzi-las:

  • Primeiro analise os problemas que você está encontrando exatamente. Dê uma olhada no seu processo (ou se você não tiver um, pergunte aos seus colegas como eles funcionam) e identifique os problemas que surgem (espaço em disco se esgota ao executar casos de teste, loops infinitos reservam muita memória, servidor web falha por causa de exceções não identificadas ou arquitetura ruim, etc.).
  • Depois de saber o que você está enfrentando, pense em como atenuar os problemas, mantendo-o simples. A configuração leva aproximadamente o mesmo tempo para 10 PCs e 100, então você deve primeiro tentar as coisas simples (na maioria das vezes, isso já é suficiente). O espaço em disco pode ser limitado por cotas de usuários, enquanto loops infinitos, bem como consumo excessivo de memória, podem ser capturados prematuramente pelos testes unitários (executados como usuário local, e não como servidor web).
  • Se isso não for suficiente, você pode pensar em implementar soluções maiores e melhores, como contêineres. Inicialmente, você perderá tempo, mas a longo prazo poderá compensar - dependendo da sua situação específica, é claro.
por 06.10.2016 / 12:05
2

Como medida preventiva, você deve procurar ulimits se quiser definir um conjunto específico de limites para os usuários. Você pode definir limites de processo / CPU / memória.

Consulte este link

A outra maneira é monitorar o uso de recursos do sistema com uma ferramenta de monitoramento externa (exemplo mais comum: nagios / nrpe), que pode alertá-lo caso um limite de recursos seja ultrapassado.

    
por 03.10.2016 / 15:33