SELinux User: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
<span id="selinux-kontext-des-jetzigen-benutzers-ausgeben"></span>
+
[[Kategorie:SELinux]]
= SELinux-Kontext des jetzigen Benutzers ausgeben =
+
<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 192: Zeile 193:
 
  1 packets transmitted, 1 received, 0% packet loss, time 0ms
 
  1 packets transmitted, 1 received, 0% packet loss, time 0ms
 
  rtt min/avg/max/mdev = 3.751/3.751/3.751/0.000 ms
 
  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
    ping: socket: Keine Berechtingung

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