Permitindo que os aplicativos node.js sejam executados na porta 80

5

Estou seguindo uma explicação passo a passo que guia você pela configuração do nó em uma máquina do Ubuntu. Estou na etapa em que você configura o sistema para permitir que o nó seja executado na porta 80. Ele (bem como alguns outros guias que eu examinei) recomenda executar o seguinte comando:

sudo setcap cap_net_bind_service=+ep /usr/local/bin/node

Isso retorna o seguinte erro:

Failed to set capabilities on file '/usr/local/bin/node' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

Alguma ideia do que pode causar este erro?

    
por ThinkingInBits 06.02.2015 / 23:37

4 respostas

9

para evitar esse erro, você pode resolver o executável não-symlink com which node , como exemplo completo:

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep 'readlink -f \'which node\''

o comando "which" mostra o caminho completo dos comandos do shell.

    
por 24.10.2015 / 01:28
4

Descobri isso. No entanto, eu instalei o node, criei um sym-link em / usr / bin / node que apontava para outro sym-link no / etc / alternatives / node que apontava para outro sym-link em /usr/bin/nodejs.

Executando o comando contra / usr / bin / nodejs trabalhado.

    
por 06.02.2015 / 23:41
2

FWIW, outra opção é usar authbind. O Authbind usa um mecanismo ligeiramente diferente para atingir fins semelhantes ao CAP_NET_BIND_SERVICE. Ou seja permite que aplicativos não privilegiados usem portas privilegiadas.

Instalar do apt:

sudo apt-get update && sudo apt-get install authbind

Assumindo que o app.js desejado está sendo executado sob o "usuário" de usuário não privilegiado e você deseja ligar à porta 80:

sudo touch /etc/authbind/byport/80
sudo chown user:user /etc/authbind/byport/80
sudo 500 /etc/authbind/byport/80

Em seguida, execute seu aplicativo assim:

authbind node app.js

Se você preferir usar algo como "para sempre" (essencialmente daemoniza aplicativos de nós), então este é o caminho:

authbind --deep forever app.js
    
por 23.03.2017 / 01:15
1

Uma razão pela qual o comando setcap às vezes falha é porque determinados sistemas de arquivos não suportam, se eles não suportarem atributos estendidos.

The filesystem must support attaching capabilities to an executable file, so that a process gains those capabilities when the file is executed.

link

Isso é especialmente verdadeiro no Docker. O Docker usa os back-ends de armazenamento BTRFS ou AUFS, mas também pode usar o overlayfs do usuário. O Overlayfs suporta limites de configuração, mas o BTRFS e o AUFS (veja abaixo) não.

link

Se você precisa executar imagens com o AUFS, você deve estar executando um kernel com CONFIG_AUFS_XATTR=y .

Por esse motivo, authbind geralmente é uma solução melhor.

    
por 17.09.2017 / 03:22