systemd サービス - UDP ブロードキャストが他のマシンに到達できない

systemd サービス - UDP ブロードキャストが他のマシンに到達できない

/usr/lib/systemd/system の下にサービスがあります。このサービスは、私が開発しているアプリ (.net core 2.0) を実行します。同じアプリが、異なるマシン (両方とも Centos7) で実行されます。これらは、UDP ソケットを使用して互いを検索します。

準備する前に、このアプリを長い間テストしてきました。サービス彼らのためにファイルを作成し、すべてがうまく機能しました。彼らはお互いにメッセージをブロードキャストすることができました。

サービスがアプリケーションを実行すると、そのインスタンスが取得できる唯一のメッセージは、同じインスタンスが最初にブロードキャストしていたメッセージです。他のマシンでも同じ状況です。独自のブロードキャストは取得できますが、他のマシンのブロードキャストは取得できません。

私は Linux 初心者で、どこを調べて何を検索すればいいのかわからず、役に立たない情報に出くわしたので、ここで助けが必要です。

ありがとう


.service ファイルの内容

[Unit]
Description=Apix

[Service]
WorkingDirectory=/apix
ExecStart=/usr/bin/dotnet /APIX/Apix.dll

[Install]
WantedBy=multi-user.target

自分でアプリを起動すると、udp ポートが dotnet によって使用されていることがわかります。ただし、サービスがアプリを実行すると、この行は消えます。

netstat -lntup
udp    0   0 0.0.0.0:14235    0.0.0.0:*     11319/dotnet

答え1

ダン・ウォルシュの2014年のライブジャーナルには の説明がありますunconfined_service_tが、SELinux の専門用語が多用されているため、現在の SELinux の知識レベルではあまり役に立たないかもしれません。

コメントのとおり、プロセスの SELinux ラベルは次のとおりです。

  • .service ファイルで起動した場合:system_u:system_r:unconfined_service_t:s0
  • 手動で開始する場合:unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

SELinux ラベルには 4 つの部分があります。

  • SELinux ユーザー (サフィックス付き_u)
  • SELinux ロール (_rサフィックス付き)
  • SELinux タイプ (サフィックス付き_t)
  • SELinuxレベルの定義は、完全な多層セキュリティSELinuxポリシー(軍事セキュリティなど)、デフォルトではないターゲットを絞ったポリシー。

SELinux のデフォルト ポリシーでは、SELinux ユーザー識別子は通常のユーザー名とは異なります。つまり、SELinux はファイルやプロセスが正確に誰に属しているかを気にせず、ユーザーが重要なシステム プロセスであるか、システム プロセスによって開始されたもの ( system_u)、管理者 ( sysadm_u)、通常のユーザー ( user_u)、または SELinux ポリシーによって制限なしと指定されたもの ( unconfined_u) であるかだけを気にします。

dbadm_rロール部分を使用して、データベース管理やlogadm_rシステム ログへのアクセスなど、いくつかの「部分管理者」ロールを指定できます。

最も重要な部分はターゲットを絞ったSELinux ポリシーは、タイプ指定、つまりサフィックスが付いた部分です_t

unconfined_service_t制限のないタイプであるはずなので、何が問題なのかはわかりません。/APIX/ディレクトリ ツリーの下のファイルはすべてラベル付けされていないため、問題が発生している可能性があります。

プロセスと同様に、ファイルにも SELinux ラベルが必要ですls -Z。これは で表示できます。一般に、SELinux はdefault_tラベルが指定されていないファイルに対して を付与します。 に直面するとdefault_t、SELinux は「これが何なのかわかりません。ラベルを失った Ultra Top Secret かもしれません。そのため、管理者が適切なラベルを教えてくれるまでは、特別にセキュリティ保護しましょう」と「考えます」。つまり、default_tは修正する必要があるものです。

通常、ファイルは、SELinux ルールで別の指定がない限り、作成時に存在していたディレクトリのラベルを継承します。ただし、 のような新しい最上位ディレクトリを作成する場合は/APIX、ラベルの付け方を決める必要があります。そうしないと、 になりdefault_t、問題が発生する可能性があります。

設定を試してみるとよいかもしれませんsemanage permissive -a unconfined_service_t: これにより、フリー アクセスを使用するすべてのサービスが許可されますunconfined_service_tが、SELinux が完全に有効になっているかのように、SELinux ポリシー違反がログに/var/log/auth/記録されます。次に、audit2why監査ログの関連部分を実行すると、SELinux がプログラムの実行をブロックしている理由がより明確に説明されます。

正しい修正方法は、単に/APIX/ディレクトリに適切なファイルシステム ラベルを付けることです。

関連情報