CentOS - Semanage - Löschen Sie den Bereich der Ports

7

Überraschenderweise konnten keine eindeutigen Informationen zum Löschen einer Reihe von Ports über gefunden werden semanage port. Hier ist eine Liste der Permutationen, die ich ausprobiert habe:

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

In der Hilfemeldung war nicht klar, wie ein Bereich angegeben werden soll:

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
Mike Purcell
quelle

Antworten:

8

Das war beeindruckend. Sie haben mich dazu gebracht, zum Quellcode zu gehen, um eine Antwort zu finden. Sie sind beim ersten Versuch auf die richtige Art und Weise gestoßen, einen Bereich zu definieren: Zwei Zahlen müssen durch einen Bindestrich getrennt werden.

Was dich aufhängt, ist Folgendes:

(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))

Wenn Sie beim Hinzufügen einer Regel einen Portbereich angeben, müssen Sie beim Löschen einer Regel denselben Portbereich angeben . Zum Beispiel:

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

Um diese zu löschen, müssen Sie delete für jeden Port oder Portbereich zwischen den Kommas einmal aufrufen. Sie können kein zusammenhängender Bereich sein, da sie nicht so definiert wurden.

Umgekehrt mit diesem Beispiel:

mysqld_port_t                  tcp      1186, 3306, 63132-63163

Sie können 63132 oder 63133 nicht einzeln löschen. Sie müssen diesen genauen Bereich angeben.

Beispiel für das Hinzufügen und Löschen eines Bereichs:

semanage port --add -t http_port_t -p tcp 8899-8902
semanage port --delete -t http_port_t -p tcp 8899-8902
Jeff Ferland
quelle
1
Wow das scheint seltsam. Ich würde denken, wir könnten einfach einen zusammenhängenden Bereich festlegen und alle darin enthaltenen Ports löschen. In der Zwischenzeit habe ich bestanden, -Dwas den Port auf Standardports zurücksetzt. Mir scheint, dass diese Zuweisungen nur für die von Ihnen gewünschten Ports gelten sollten und nicht für alle diese Standardports. Vielen Dank für das Follow-up, sehr geschätzt.
Mike Purcell
@ MikePurcell Ja, es ist ein bisschen frustrierend. Was passiert, ist, dass alles, was angegeben wird, zu einem Schlüssel wird. Daher muss der resultierende Schlüssel für jede Operation derselbe Schlüssel sein, der für das Hinzufügen verwendet wurde. Schuld daran ist die zugrunde liegende Kernel-API.
Jeff Ferland