Como permitir que um aplicativo baseado em Java se conecte à porta baixa

3

Eu preciso executar um determinado aplicativo em um sistema baseado no CentOS 7.5. Este aplicativo precisa se ligar à porta 389 para expor um serviço ldap. Este aplicativo é executado pelo SystemD, mas falha ao iniciar porque o usuário que eu tenho que usar para executar o aplicativo não tem permissão para vincular a portas menores que 1024. Eu já tentei setcap 'cap_net_bind_service=+ep' /opt/jdk8/bin/java , mas depois disso, o Java nem sequer consegue iniciar.

Eu já vi soluções baseadas em iptables forward, ssh tunnels etcetera. Toda essa "mágica" não é permitida no sistema que tenho que usar. Eu acho que o mesmo se aplica a setcap .

Existe alguma configuração que eu possa usar no SystemD? Tenho certeza de que isso pode ser feito porque preciso executar nginx na porta 80 com o mesmo usuário e lá funciona.

Como não tenho o código fonte do aplicativo, não posso alterar a maneira como ele abre a porta.

    
por Marged 05.07.2018 / 15:53

2 respostas

1

Se você pudesse dar recursos elevados a java (ou qualquer coisa que use bibliotecas dinâmicas), um invasor poderia alternar as bibliotecas para obter recursos.

Uma solução

Escreva um programa C mínimo (vinculado estaticamente), abra-o e anexe-o ao descritor de arquivo 3. E, em seguida, execute o programa java. O programa java terá que fazer um fdopen, para fazer com que pareça um arquivo do ponto de vista do java ( open "/dev/fd/3" ). Esse wrapper precisaria dos recursos.

    
por 05.07.2018 / 16:09
1

Existem muitas soluções que você pode se inscrever aqui, já que você está usando o systemd, este parece ser o caminho a percorrer, usando ListenStream :

$ cat /etc/systemd/system/gitea.socket
[Unit]
Description=Gitea socket

[Socket]
ListenStream=80
NoDelay=true

Depois de definir seu arquivo .socket , defina seu arquivo de unidade da seguinte forma:

[Unit]
Description=Gitea (Git with a cup of tea)
Requires=gitea.socket
After=syslog.target
After=network.target
After=postgresql.service

[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/go/src/code.gitea.io/gitea
ExecStart=/home/git/go/src/code.gitea.io/gitea/gitea web
Restart=always
Environment=USER=git HOME=/home/git
NonBlocking=true

[Install]
WantedBy=multi-user.target

Referências

por 05.07.2018 / 16:23

Tags