SELinux User: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| (15 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
<span id="selinux-kontext-des- | [[Kategorie:SELinux]] | ||
= SELinux-Kontext des | <span id="selinux-kontext-des-aktuellen-benutzers-ausgeben"></span> | ||
= SELinux-Kontext des aktuellen Benutzers ausgeben = | |||
* id -Z ''(Ausgangseinstellung für jeden Benutzer)'': | * id -Z ''(Ausgangseinstellung für jeden Benutzer)'': | ||
| Zeile 30: | Zeile 31: | ||
== Bedeutung dieser Fehlermeldung == | == Bedeutung dieser Fehlermeldung == | ||
'''ping''' sagt, dass der Socket keine Berechtigung hat. | |||
Den genauen Verstoß kann man mit '''ausearch''' anzeigen und die Behebung mit '''audit2allow''': | |||
-- | * ausearch -m AVC -ts recent | ||
<!-----> | |||
---- | |||
time->Tue Nov 29 09:02:06 2022 | |||
type=AVC msg=audit(1669708926.962:629): avc: denied { create } for pid=13973 comm="ping" scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=icmp_socket permissive=0 | |||
---- | |||
time->Tue Nov 29 09:02:06 2022 | |||
type=AVC msg=audit(1669708926.962:630): avc: denied { create } for pid=13973 comm="ping" scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=rawip_socket permissive=0 | |||
---- | |||
time->Tue Nov 29 09:02:06 2022 | |||
type=AVC msg=audit(1669708926.962:631): avc: denied { create } for pid=13973 comm="ping" scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=icmp_socket permissive=0 | |||
---- | |||
time->Tue Nov 29 09:02:06 2022 | |||
type=AVC msg=audit(1669708926.962:632): avc: denied { create } for pid=13973 comm="ping" scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=rawip_socket permissive=0 | |||
* ausearch -m AVC -ts recent | audit2allow -R | |||
<!-----> | |||
require { | |||
type user_t; | |||
class icmp_socket create; | |||
class rawip_socket create; | |||
} | |||
#============= user_t ============== | |||
allow user_t self:icmp_socket create; | |||
allow user_t self:rawip_socket create; | |||
<span id="audit2allow-vorschlag-installieren"></span> | <span id="audit2allow-vorschlag-installieren"></span> | ||
== '''audit2allow''' Vorschlag installieren == | == '''audit2allow''' Vorschlag installieren == | ||
* In diesem Fall ist der Vorschlag von '''audit2allow''' relativ sinnvoll, da der ''icmp_socket'' schon vordefiniert ist. | * In diesem Fall ist der Vorschlag von '''audit2allow''' relativ sinnvoll, da der ''icmp_socket'' schon vordefiniert ist. | ||
* ausearch -m AVC -ts recent | audit2allow -M my_user_ping | |||
* semodule -i my_user_ping.pp | |||
<!-----> | |||
<span id="weitere-rechte-freigeben"></span> | |||
== Weitere Rechte freigeben == | |||
Wenn ''xinux'' jetzt versucht '''ping''' zu benutzen, dann kommt folgende Meldung: | |||
* ping localhost | |||
<!-----> | |||
ping: socket: Die Operation ist nicht erlaubt | |||
Diagnose: | |||
* ausearch -m AVC -ts recent | |||
<!-----> | |||
---- | |||
time->Tue Nov 29 09:44:19 2022 | |||
type=AVC msg=audit(1669711459.943:667): avc: denied { net_raw } for pid=14186 comm="ping" capability=13 scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=capability permissive=0 | |||
---- | |||
time->Tue Nov 29 09:44:19 2022 | |||
type=AVC msg=audit(1669711459.943:668): avc: denied { net_raw } for pid=14186 comm="ping" capability=13 scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=capability permissive=0 | |||
* ausearch -m AVC -ts recent | audit2allow -R | |||
<!-----> | |||
require { | |||
type user_t; | |||
class capability net_raw; | |||
} | |||
#============= user_t ============== | |||
allow user_t self:capability net_raw; | |||
Diese Zeilen fügen wir zu der bestehenden ''.te''-Datei hinzu: | |||
module my_user_ping 1.0; | |||
require { | |||
type user_t; | |||
class icmp_socket create; | |||
class rawip_socket create; | |||
'''class capability net_raw;''' | |||
} | |||
#============= user_t ============== | |||
allow user_t self:icmp_socket create; | |||
allow user_t self:rawip_socket create; | |||
'''allow user_t self:capability net_raw;''' | |||
<span id="neu-kompilieren-und-installieren"></span> | |||
=== Neu kompilieren und installieren: === | |||
* make -f /usr/share/selinux/devel/Makefile my_user_ping.pp | |||
* semodule -i my_user_ping.pp | |||
<!-----> | |||
<span id="ping-nochmals-testen"></span> | |||
=== '''ping''' nochmals testen === | |||
Als ''xinux'': | |||
* ping localhost | |||
<!-----> | |||
ping: IPV6_RECVERR: Keine Berechtigung | |||
* ping heise.de | |||
<!-----> | |||
ping: WARNING: setsockopt(ICMP_FILTER): Keine Berechtigung | |||
ping: WARNING: your kernel is veeery old. No problems. | |||
PING heise.de (193.99.144.80) 56(84) bytes of data. | |||
ping: Warning: no SO_TIMESTAMP support, falling back to SIOCGSTAMP | |||
ping: sendmsg: Keine Berechtigung | |||
<span id="letze-rechte-freigeben"></span> | |||
== Letze Rechte freigeben == | |||
* ausearch -m AVC -ts recent | audit2allow -R | |||
<!-----> | |||
require { | |||
type user_t; | |||
class rawip_socket { getopt read setopt write }; | |||
} | |||
#============= user_t ============== | |||
allow user_t self:rawip_socket { getopt read setopt write }; | |||
* cat my_user_ping.te | |||
<!-----> | |||
module my_user_ping 1.0; | |||
require { | |||
type user_t; | |||
class icmp_socket create; | |||
'''class rawip_socket { create getopt read setopt write };''' | |||
class capability net_raw; | |||
} | |||
#============= user_t ============== | |||
allow user_t self:icmp_socket create; | |||
'''allow user_t self:rawip_socket { create getopt read setopt write };''' | |||
allow user_t self:capability net_raw; | |||
* make -f /usr/share/selinux/devel/Makefile my_user_ping.pp | |||
* semodule -i my_user_ping.pp | |||
<!-----> | |||
<span id="pingen-als-xinux"></span> | |||
== Pingen als ''xinux'' == | |||
* ping localhost | |||
<!-----> | |||
PING localhost(localhost (::1)) 56 data bytes | |||
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.073 ms | |||
--- localhost ping statistics --- | |||
1 packets transmitted, 1 received, 0% packet loss, time 0ms | |||
rtt min/avg/max/mdev = 0.073/0.073/0.073/0.000 ms | |||
* ping heise.de | |||
<!-----> | |||
PING heise.de (193.99.144.80) 56(84) bytes of data. | |||
64 bytes from redirector.heise.de (193.99.144.80): icmp_seq=1 ttl=245 time=3.75 ms | |||
--- heise.de ping statistics --- | |||
1 packets transmitted, 1 received, 0% packet loss, time 0ms | |||
rtt min/avg/max/mdev = 3.751/3.751/3.751/0.000 ms | |||
<span id="ausgangszustand-wiederherstellen"></span> | |||
= Ausgangszustand wiederherstellen = | |||
''my_user_ping''-Modul deinstallieren: | |||
* semodule -r my_user_ping | |||
<!-----> | |||
User-Ping über SELinux-Booleans wieder freischalten: | |||
* setsebool user_ping 1 | |||
<!-----> | |||
Den Benutzer ''xinux'' wieder zum ''unconfined_u'' machen: | |||
* semanage login -d xinux | |||
Aktuelle Version vom 11. Oktober 2024, 07:47 Uhr
SELinux-Kontext des aktuellen Benutzers ausgeben
- id -Z (Ausgangseinstellung für jeden Benutzer):
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
User xinux dem SELinux User user_u zuordnen und user_ping ausschalten
- semanage login -a -s user_u xinux
- id -Z (als xinux):
user_u:user_r:user_t:s0
- setsebool user_ping 0
Ping für SELinux User user_u per eigenes Modul freischalten
- xinux
- ping localhost
Bedeutung dieser Fehlermeldung
ping sagt, dass der Socket keine Berechtigung hat.
Den genauen Verstoß kann man mit ausearch anzeigen und die Behebung mit audit2allow:
- ausearch -m AVC -ts recent
----
time->Tue Nov 29 09:02:06 2022
type=AVC msg=audit(1669708926.962:629): avc: denied { create } for pid=13973 comm="ping" scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=icmp_socket permissive=0
----
time->Tue Nov 29 09:02:06 2022
type=AVC msg=audit(1669708926.962:630): avc: denied { create } for pid=13973 comm="ping" scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=rawip_socket permissive=0
----
time->Tue Nov 29 09:02:06 2022
type=AVC msg=audit(1669708926.962:631): avc: denied { create } for pid=13973 comm="ping" scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=icmp_socket permissive=0
----
time->Tue Nov 29 09:02:06 2022
type=AVC msg=audit(1669708926.962:632): avc: denied { create } for pid=13973 comm="ping" scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=rawip_socket permissive=0
- ausearch -m AVC -ts recent | audit2allow -R
require {
type user_t;
class icmp_socket create;
class rawip_socket create;
}
#============= user_t ==============
allow user_t self:icmp_socket create;
allow user_t self:rawip_socket create;
audit2allow Vorschlag installieren
- In diesem Fall ist der Vorschlag von audit2allow relativ sinnvoll, da der icmp_socket schon vordefiniert ist.
- ausearch -m AVC -ts recent | audit2allow -M my_user_ping
- semodule -i my_user_ping.pp
Weitere Rechte freigeben
Wenn xinux jetzt versucht ping zu benutzen, dann kommt folgende Meldung:
- ping localhost
ping: socket: Die Operation ist nicht erlaubt
Diagnose:
- ausearch -m AVC -ts recent
----
time->Tue Nov 29 09:44:19 2022
type=AVC msg=audit(1669711459.943:667): avc: denied { net_raw } for pid=14186 comm="ping" capability=13 scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=capability permissive=0
----
time->Tue Nov 29 09:44:19 2022
type=AVC msg=audit(1669711459.943:668): avc: denied { net_raw } for pid=14186 comm="ping" capability=13 scontext=user_u:user_r:user_t:s0 tcontext=user_u:user_r:user_t:s0 tclass=capability permissive=0
- ausearch -m AVC -ts recent | audit2allow -R
require {
type user_t;
class capability net_raw;
}
#============= user_t ==============
allow user_t self:capability net_raw;
Diese Zeilen fügen wir zu der bestehenden .te-Datei hinzu:
module my_user_ping 1.0;
require {
type user_t;
class icmp_socket create;
class rawip_socket create;
class capability net_raw;
}
#============= user_t ==============
allow user_t self:icmp_socket create;
allow user_t self:rawip_socket create;
allow user_t self:capability net_raw;
Neu kompilieren und installieren:
- make -f /usr/share/selinux/devel/Makefile my_user_ping.pp
- semodule -i my_user_ping.pp
ping nochmals testen
Als xinux:
- ping localhost
ping: IPV6_RECVERR: Keine Berechtigung
- ping heise.de
ping: WARNING: setsockopt(ICMP_FILTER): Keine Berechtigung ping: WARNING: your kernel is veeery old. No problems. PING heise.de (193.99.144.80) 56(84) bytes of data. ping: Warning: no SO_TIMESTAMP support, falling back to SIOCGSTAMP ping: sendmsg: Keine Berechtigung
Letze Rechte freigeben
- ausearch -m AVC -ts recent | audit2allow -R
require {
type user_t;
class rawip_socket { getopt read setopt write };
}
#============= user_t ==============
allow user_t self:rawip_socket { getopt read setopt write };
- cat my_user_ping.te
module my_user_ping 1.0;
require {
type user_t;
class icmp_socket create;
class rawip_socket { create getopt read setopt write };
class capability net_raw;
}
#============= user_t ==============
allow user_t self:icmp_socket create;
allow user_t self:rawip_socket { create getopt read setopt write };
allow user_t self:capability net_raw;
- make -f /usr/share/selinux/devel/Makefile my_user_ping.pp
- semodule -i my_user_ping.pp
Pingen als xinux
- ping localhost
PING localhost(localhost (::1)) 56 data bytes 64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.073 ms --- localhost ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.073/0.073/0.073/0.000 ms
- ping heise.de
PING heise.de (193.99.144.80) 56(84) bytes of data. 64 bytes from redirector.heise.de (193.99.144.80): icmp_seq=1 ttl=245 time=3.75 ms --- heise.de ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 3.751/3.751/3.751/0.000 ms
Ausgangszustand wiederherstellen
my_user_ping-Modul deinstallieren:
- semodule -r my_user_ping
User-Ping über SELinux-Booleans wieder freischalten:
- setsebool user_ping 1
Den Benutzer xinux wieder zum unconfined_u machen:
- semanage login -d xinux