Hospedagem e segurança do servidor de jogos

1

Estou trabalhando em um pequeno painel de controle para um projeto de hobby meu, que deve configurar servidores de jogos. Mas eu tenho algumas preocupações em relação à segurança que gostaria de ter alguma informação.

A minha primeira ideia é ter o controlpanel "remote" (com o qual uma interface web interage) a correr como utilizador, e ao configurar servidores de jogo todos iriam para um subdirectorio da sua casa pasta, assim:

/home/paneluser/servers/server1/
/home/paneluser/servers/server2/
/home/paneluser/servers/server3/

Mas como os usuários teriam acesso FTP a esses subdiretórios, eles poderiam enviar código malicioso (ou seja, alterar o executável) para que pudessem acessar facilmente arquivos de outros servidores e, por exemplo, excluir arquivos.

Minha segunda ideia é executar o painel de controle "remote" como seu próprio usuário (root?), que cria usuários separados para cada servidor e os inicia como o usuário apropriado.

Minha terceira idéia é expandir a primeira e executar todos os servidores em algum tipo de sandbox onde os executáveis não podem acessar arquivos externos. Mas eu tecnicamente não sei como isso seria feito ou se é possível.

Então, o que eu gostaria de saber é qual seria a melhor abordagem. Ou há outra abordagem melhor?

    
por xit 25.03.2014 / 05:34

2 respostas

5

My second idea is to run the controlpanel "remote" as it's own user (root?) which then creates separate users for each server and starts them as the appropriate user.

Esta não é a melhor solução, mas no interesse de você aprender, vou criticá-la de qualquer maneira. Vou chegar à melhor solução em apenas um segundo, mas isso é importante.

Repita depois de mim: nunca, nunca execute serviços voltados para a web como root se puder ajudá-lo (e neste caso você pode ajudá-lo, porque você tem controle sobre a aplicação).

A maneira correta de implementar isso é ter um daemon que inicia como root, mas descarta privilégios para um usuário não privilegiado. Você faria com que este daemon gerasse um segundo daemon antes de abandonar os privilégios, e o daemon sem privilégios falaria com o daemon privilegiado. O daemon privilegiado, então, executaria ações em nome do daemon sem privilégios.

Repita depois de mim: ter esse tipo de separação de privilégio é USELESS, a menos que o daemon privilegiado execute a validação. Isso significa que você não pode ter o daemon privilegiado aceitando cegamente comandos do daemon não privilegiado. Deve certificar-se de que o comando é algo que está certo e faz sentido. Se você não fizer a validação, você introduziu um . Ao escrever esse tipo de código de segurança, assuma que seu serviço voltado para a Web será comprometido. Eu ouço o que você está dizendo - "isso nunca vai acontecer". Sim, será. A segurança é toda sobre limitar o dano. Você também pode se beneficiar ao ler As seis ideias mais idiotas em segurança de computadores .

My third idea is to expand on the first one, and run all servers in some kind of sandbox where where the executables can't access files outside. But I do not technically know how this would be done or if it's even possible.

A +: essa é (parte de) a maneira correta de realizar esse tipo de segurança de aplicativo da web. A maneira de conseguir isso é gerando os processos do servidor em um chroot jail .

    
por 25.03.2014 / 07:36
1

Eu sugeriria. cada servidor de jogo é executado como seu próprio usuário.

/ home / user1 / game / home / user2 / game

Então, para iniciar e parar o servidor do jogo, você só precisa do seu servidor web para executar um comando como esse usuário (user1 ou user2).

O SFTP é fácil de configurar quando suportado por usuários reais.

Pessoalmente, eu executaria um deamon como cada usuário que ouve comandos em um arquivo fifo ou tmp e os executa como usuário. Em seguida, faça o front end da Web gravar nesse arquivo.

O deamon deve apenas ouvir comandos específicos como "stop" e "start" que executam o jogo ou o matam. Desta forma, sua separação está intacta, mas você pode executar comandos que você como a configuração admin / dev.

    
por 25.03.2014 / 15:21