Linux

CentOS - Semanage - 刪除埠範圍

  • April 5, 2018

令人驚訝的是,找不到任何關於如何通過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

嗯,這令人印象深刻,你讓我去原始碼尋找答案。您確實在第一次嘗試時偶然發現了定義範圍的正確方法:兩個數字必須用連字元分隔。

讓你感到困惑的是:

(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。它們不能是一個連續的範圍,因為它們不是這樣定義的。

相反,在這個例子中:

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

引用自:https://serverfault.com/questions/448859