web-dev-qa-db-ja.com

CentOS-semanage-ポートの範囲を削除する

驚いたことに、semanage portを使用してポートの範囲を削除する方法に関する明確な情報が見つかりませんでした。これが私が試した順列のリストです:

semanage port -d -t http_port_t -p tcp 0-60000
semanage port -d -t http_port_t -p tcp [1-60000]
semanage port -d -t http_port_t -p tcp 1,60000
semanage port -d -t http_port_t -p tcp 1-60000
semanage port -d -t http_port_t -p tcp 1 60000
semanage port -d -t http_port_t -p tcp 1,60000
semanage port -d -t http_port_t -p tcp <60000
semanage port -d -t http_port_t -p tcp '1-60000'
semanage port -d -t http_port_t -p tcp '1,60000'
semanage port -d -t http_port_t -p tcp 1000-10000

範囲を示す方法についてのヘルプメッセージは明確ではありませんでした。

root@service1 /etc/yum/pluginconf.d # -> semanage -h
/usr/sbin/semanage: 
semanage [ -S store ] -i [ input_file | - ]
semanage [ -S store ] -o [ output_file | - ]

semanage login -{a|d|m|l|D|E} [-nrs] login_name | %groupname
semanage user -{a|d|m|l|D|E} [-LnrRP] selinux_name
semanage port -{a|d|m|l|D|E} [-nrt] [ -p proto ] port | port_range
7
Mike Purcell

それは印象的でした、あなたは私に答えを見つけるためにソースコードに行くようにさせました。最初の試行で範囲を定義する適切な方法を見つけました。2つの数値はハイフンで区切る必要があります。

あなたをハングアップさせているのはこれです:

(rc, exists) = semanage_port_exists(self.sh, k)
if rc < 0:
    raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
if not exists:
    raise ValueError(_("Port %s/%s is not defined") % (proto, port))

ルールを追加するときにポートの範囲を指定する場合、ルールを削除するときに同じ範囲のポートを指定する必要があります。例えば:

Sudo semanage port -l | grep ^http_port_t
http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443

これらを削除するには、カンマ間のポートまたはポート範囲ごとに、deleteを1回呼び出す必要があります。それらはそのように定義されていなかったので、連続した範囲になることはできません。

逆に、この例では:

mysqld_port_t                  tcp      1186, 3306, 63132-63163

63132または63133を個別に削除することはできません。その正確な範囲を指定する必要があります。

範囲の追加と削除の例:

semanage port --add -t http_port_t -p tcp 8899-8902
semanage port --delete -t http_port_t -p tcp 8899-8902
8
Jeff Ferland