Usando su - (usuário) para abrir a porta privilegiada que não está funcionando

2

Então eu queria rodar um servidor Node na porta 80, mas eu não queria rodar todo o processo com privilégios de root, por segurança achei que seria o melhor.

Então, pensei que uma boa solução seria usar como root:

su - (myuser) -c 'script para sempre do nó'

No entanto, recebo erros de EACCESS, mas a execução do script diretamente como root está bem. Eu ouço os outros fazendo o mesmo e trabalhando para eles, então será que estou fazendo algo diferente?

Existe uma estratégia melhor para isso, para abrir a porta em privilégios de root e depois descartar os privilégios de root assim que o aplicativo estiver rodando?

    
por iQ. 20.09.2014 / 12:29

3 respostas

3

sim, pode fazer isso. veja este post que explica melhor do que eu.

link

Estou copiando o código relevante aqui, caso o blog fique indisponível

app.listen(80, 'localhost', null, function() {
  // Listening
  try {
    console.log('Old User ID: ' + process.getuid() + ', Old Group ID: ' + process.getgid());
    process.setgid('users');
    process.setuid('tlhunter');
    console.log('New User ID: ' + process.getuid() + ', New Group ID: ' + process.getgid());
  } catch (err) {
    console.log('Cowardly refusing to keep the process alive as root.');
    process.exit(1);
  }
});
    
por 20.09.2014 / 13:21
2

su - <user> alterna para <user> antes de fazer qualquer outra coisa, portanto, o servidor NodeJS será iniciado como seu usuário e não terá nenhuma pista sobre a execução do comando su , e como os usuários não têm permissão para use portas privilegiadas, isso nunca funcionará.

Existem duas maneiras de contornar isso que eu consigo pensar em cima da minha cabeça:

  1. Usando um recurso de arquivo que permitirá que usuários sem privilégios abram portas com privilégios. Embora eles geralmente não funcionem em scripts, nesse caso, eles devem, desde que eu saiba, iniciar o servidor usando node <filename> . (Corrija-me se estiver errado).

  2. Usando um proxy reverso como o NGINX que fica na frente do servidor de aplicativos, sendo executado como root. Nesse caso, os usuários se conectam diretamente ao NGINX, que então faz o proxy das conexões para o servidor de aplicativos, mas permite que você execute mais facilmente vários servidores / instâncias e permite recursos de cache do NGINX. Isso costuma ser a abordagem geralmente preferida quando se trata de implantar servidores de aplicativos.

por 20.09.2014 / 13:35
0

Se estiver usando o Gnu / Linux, você pode usar recursos para dar ao aplicativo a capacidade de abrir portas privilegiadas e nenhum outro recurso (o root fornece todos os recursos).

Veja aqui uma introdução básica link

[editar:] O recurso GNU / Linux que você está procurando é cap_net_bind_service. No Solaris, use PRIV_NET_PRIVADDR. Para obter informações mais detalhadas, consulte recursos man (7) (Linux) ou man privileges (5) (Solaris).

    
por 20.09.2014 / 13:34

Tags