によるとsemanage-port(1)
...
- -a は --add と同じ効果を持ちます。
- -t は --type と同じ効果を持ちます。
- -p は --port と同じ効果を持ちます。
そして命令を出す
semanage port -a -t http_port_t -p tcp 81
Apache がポート 81 でリッスンできるようにします。
今まではそんなに良くなった。しかし、これはhaproxy関連の問題に対する解決策ですこの命令を教えてください
semanage port --add --type http_port_t --proto tcp 8001
haproxyが接続できるポートのリストにポートを追加します。
listening on
SELinuxに関する限り、これは意味し、常に同じですか?connecting to
それとも、ポートリストを受信、送信、またはその両方にリンクするルールはありますか?では、オペレーティングシステムでこの情報をどこで見つけることができ、どのように変更できますか?
答え1
SELinuxに関する限り、「リスニング」と「接続」は、いいえ同じもの。これは2つの異なる操作であり、どちらかを実行するにはプロセスに正しい権限が必要です。ポートにバインドしてポートに接続する場合、これらの権限name_bind
はとですname_connect
。
この場合、私たちはクラスの権限に興味があります。しかし、一般的なSELinuxの場合と同様に、1つの情報がありません。つまり、どのクラスの権限ですか?これを見つけるより良い方法があるようですが、実際にはまだ見つかりませんでした。それでは、私たちが知っていることを活用しましょう。
sesearch -d -A -t http_port_t
Found 81 semantic av rules:
allow cloud_init_t http_port_t : tcp_socket name_connect ;
...
これにより、http_port_tをターゲットとして許可されているすべてのルールが表示されます。ありがたいことに、私たちはそれらがすべて同じクラスtcp_socketで実行されていることがわかります。これは意味があります。それでは、tcp_socketクラスが持っているすべての権限を確認してみましょう(私が知っている限り、これはポリシー自体で定義されています)。
seinfo -ctcp_socket -x
-c
オブジェクトクラスを印刷します(フラグと名前の間にスペースがあってはいけません)。-x
より多くの情報を表示(この場合、実際に私たちが興味を持っているもの - 権限!)
これにより、tcp_socket クラスに適用されるすべての権限が一覧表示されます。その中で、name_bind と name_connect は質問の LISTEN ON と CONNECT TO の意味です。
haproxyを使用するとします。 haproxyのSELinuxタイプは次のとおりですhaproxy_t
。ここで、http_port_tで定義されているポートに対するhaproxyが持っている権限を確認してください。
sesearch -d -A -s haproxy_t -t http_port_t
Found 1 semantic av rules:
allow haproxy_t http_port_t : tcp_socket { name_bind name_connect } ;
これは、haproxy に name_bind 権限と name_connect 権限があることを示します。したがって、http_port_tにどのポートを追加しても、haproxyはそのポートにバインドして接続できます(ただし、http_port_tを使用する他のすべてのタイプもそのポートに対する適切な権限を使用できます。たとえば、openvpnはメッセージを送受信できます。があります)、バインディングと接続)。
http_port_tの代わりにhaproxyが各権限に特定の型を使用する場合(たとえば、haproxy_connect_port_tおよびhaproxy_bind_port_tにそれぞれname_connectおよびname_bind権限がある場合)、haproxy_connect_port_tにポートを追加するとそのポートにのみ接続できますが、受信/バインドできません。