CentOS 7.5ベースのシステムでアプリケーションを実行する必要があります。 LDAPサービスを公開するには、アプリケーションをポート389にバインドする必要があります。アプリケーションはSystemDによって実行されますが、アプリケーションの実行に使用する必要があるユーザーが1024未満のポートへのバインディングを許可しないため、起動しません。私はこれを試しましたが、setcap 'cap_net_bind_service=+ep' /opt/jdk8/bin/java
その後Javaは起動しません。
iptables配信、SSHトンネリングなどに基づくソリューションを見ました。私が作業しなければならないシステムは、このすべての「魔法」を許可しません。にも同じだと思いますsetcap
。
SystemDで使用できる設定はいくつありますか?同じユーザーを使用してnginx
ポート上で実行する必要があり80
、機能するため、何とか実行できると確信しています。
アプリケーションのソースコードがないため、ポートを開く方法を変更することはできません。
答え1
Java(またはダイナミックライブラリを使用するすべての項目)に拡張機能を提供できる場合、攻撃者はライブラリを切り替えて機能を取得する可能性があります。
離れた
ポートを開き、それをファイル記述子3に接続する最小限のCプログラム(静的にリンクされています)を作成します。次に Java プログラムを実行します。 Javaプログラムはfdopenを実行し、Javaの観点からファイルのように見えるようにする必要があります。 (open "/dev/fd/3"
)このラッパーにはこれらの機能が必要です。
答え2
ここで利用可能な多くのソリューションがあります。 systemdを使用しているので、次のことをお勧めしますListenStream
。
$ cat /etc/systemd/system/gitea.socket
[Unit]
Description=Gitea socket
[Socket]
ListenStream=80
NoDelay=true
その後、ファイルが定義されたら、.socket
次のように単位ファイルを定義できます。
[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