Das Entfernen des Moduls schlägt fehl – ​​Porttyp kann nicht gefunden werden, ist aber da?

Das Entfernen des Moduls schlägt fehl – ​​Porttyp kann nicht gefunden werden, ist aber da?

Ich habe ein SELinux-Modul, das es Apache unter anderem ermöglicht, sich über TCP mit einem bestimmten Port zu verbinden:

cat <<EOF > sgtest.te
module sgtest 1.0.0;

require {
   attribute port_type;
   type httpd_t;
   class tcp_socket name_socket;
}

type my_port_t, port_type;

allow httpd_t my_port_t:tcp_socket name_socket;
EOF

echo > sgtest.fc

checkmodule -M -m -o sgtest.mod sgtest.te
semodule_package -o sgtest.pp -m sgtest.mod -f sgtest.fc
semodule -i sgtest.pp

semanage port -a -t my_port_t -p tcp 2002

Die Installation verläuft einwandfrei und die Regeln scheinen zu funktionieren.

Der Port ist definitiv installiert:

$ semanage port -l | grep my_port_t
my_port_t                      tcp      2002

Ich kann das Modul jedoch nicht entfernen:

$ semodule -r sgtest
libsemanage.semanage_direct_remove_key: Removing last sgtest module (no other sgtest module exists at another priority).
libsepol.context_from_record: type my_port_t is not defined (No such file or directory).
libsepol.context_from_record: could not create context structure (Invalid argument).
libsepol.port_from_record: could not create port structure for range 2002:2002 (tcp) (Invalid argument).
libsepol.sepol_port_modify: could not load port range 2002 - 2002 (tcp) (Invalid argument).
libsemanage.dbase_policydb_modify: could not modify record value (Invalid argument).
libsemanage.semanage_base_merge_components: could not merge local modifications into policy (Invalid argument).
semodule:  Failed!

Dies ist auf CentOS 7.4.1708.

Was habe ich falsch gemacht?

Antwort1

Ich verstehe nicht, wie das funktioniert oder was es mit der Fehlermeldung zu tun hat, aber ich habe herausgefunden, dass ich aus der Situation herauskomme, wenn ich zuerst den Port entferne:

semanage port -d -p tcp 2002
semodule -r sgtest

verwandte Informationen