Eigenes Profil erstellen Beispiel ncat: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
−
=Kopieren der Netzkatze=
+
<span id="kopieren-der-netzkatze"></span>
−
*cp /usr/bin/ncat /usr/local/bin/netzkatze
+
= Kopieren der Netzkatze =
−
=System Dienst=
 
−
*cat /etc/systemd/system/netzkatze.service
 
−
<pre>
 
−
[Unit]
 
−
Description=Simple testing daemon
 
  
−
[Service]
+
* cp /usr/bin/ncat /usr/local/bin/netzkatze
−
Type=simple
 
−
ExecStart=/usr/local/bin/netzkatze -lp 8888
 
−
StandardOutput=/tmp/netzkatze
 
  
−
[Install]
+
<!----->
−
WantedBy=multi-user.target
+
<span id="benutzerdefiniert-richtlinie-für-das-programm-netzkatze-generieren"></span>
 +
= Benutzerdefiniert Richtlinie für das Programm “netzkatze” generieren =
  
−
</pre>
+
* sepolicy generate –init /usr/local/bin/netzkatze
  
−
==Temporäre Änderung des Kontexts==
+
<!----->
−
  chcon -u system_u -t systemd_unit_t netzkatze.service
+
Failed to retrieve rpm info for selinux-policy
 +
Created the following files:
 +
  /root/selinux/modules/netzkatze/netzkatze.te # Typ-Enforcement-Datei
 +
/root/selinux/modules/netzkatze/netzkatze.if # Schnittstellendatei
 +
/root/selinux/modules/netzkatze/netzkatze.fc # Dateikontext-Datei
 +
/root/selinux/modules/netzkatze/netzkatze_selinux.spec # Spezifikationsdatei
 +
/root/selinux/modules/netzkatze/netzkatze.sh # Einrichtungsskript
 +
<span id="einrichten-des-neuen-richtlinienmoduls-mithilfe-des-erzeugten-setup-skripts"></span>
 +
= Einrichten des neuen Richtlinienmoduls mithilfe des erzeugten Setup-Skripts =
  
−
==Permanente Änderung des Kontexts==
+
* ./netzkatze
−
*semanage fcontext -a -t systemd_unit_t netzkatze.service
 
−
*restorecon -v netzkatze.service
 
  
−
=Systemctl status=
+
<!----->
−
*systemctl start netzkatze
+
Building and Loading Policy
−
*systemctl status netzkatze
+
\+ make -f /usr/share/selinux/devel/Makefile netzkatze.pp
−
=Check that the new daemon is confined by SELinux=
+
Compiling default netzkatze module
−
*ps -efZ | grep netzkatze
+
Creating default netzkatze.pp policy package
−
  system_u:system_r:unconfined_service_t:s0 root 5812    1 0 15:41 ?        00:00:00 /usr/local/bin/netzkatze
+
rm tmp/netzkatze.mod tmp/netzkatze.mod.fc
 +
\+ /usr/sbin/semodule -i netzkatze.pp
 +
libsemanage.add_user: user sddm not in password file
 +
\+ sepolicy manpage -p . -d netzkatze_t
 +
./netzkatze_selinux.8
 +
\+ /sbin/restorecon -F -R -v /usr/local/sbin/netzkatze
 +
  Relabeled /usr/local/sbin/netzkatze from unconfined_u:object_r:bin_t:s0 to system_u:object_r:netzkatze_exec_t:s0
 +
\+ pwd
 +
\+ pwd=/root/selinux/modules/netzkatze
 +
  \+ rpmbuild --define \_sourcedir /root/selinux/modules/netzkatze --define \_specdir /root/selinux/modules/netzkatze --define \_builddir /root/selinux/modules/netzkatze --define \_srcrpmdir /root/selinux/modules/netzkatze --define \_rpmdir /root/selinux/modules/netzkatze --define \_buildrootdir /root/selinux/modules/netzkatze/.build -ba netzkatze\_selinux.spec
 +
./netzkatze.sh: 52: rpmbuild: not found
 +
<span id="systemd-dienst-erstellen"></span>
 +
= Systemd-Dienst erstellen =
  
−
=Generieren Sie eine benutzerdefinierte Richtlinie für den Daemon=
+
* cat /lib/systemd/system/netzkatze.service
−
*sepolicy generate --init /usr/local/bin/netzkatze
 
−
Created the following files:
 
−
/etc/systemd/system/netzkatze.te # Type Enforcement file
 
−
/etc/systemd/system/netzkatze.if # Interface file
 
−
/etc/systemd/system/netzkatze.fc # File Contexts file
 
−
/etc/systemd/system/netzkatze_selinux.spec # Spec file
 
−
/etc/systemd/system/netzkatze.sh # Setup Script
 
−
=Erstellen Sie die Systemrichtlinie mit dem neuen Richtlinienmodul mithilfe des mit dem vorherigen Befehl erstellten Setup-Skripts neu=
 
−
*./netzkatze.sh
 
−
<pre>
 
−
Building and Loading Policy
 
−
+ make -f /usr/share/selinux/devel/Makefile netzkatze.pp
 
−
Compiling targeted netzkatze module
 
−
Creating targeted netzkatze.pp policy package
 
−
rm tmp/netzkatze.mod tmp/netzkatze.mod.fc
 
−
+ /usr/sbin/semodule -i netzkatze.pp
 
−
+ sepolicy manpage -p . -d netzkatze_t
 
−
./netzkatze_selinux.8
 
−
+ /sbin/restorecon -F -R -v /usr/local/bin/netzkatze
 
−
Relabeled /usr/local/bin/netzkatze from unconfined_u:object_r:bin_t:s0 to system_u:object_r:netzkatze_exec_t:s0
 
−
...
 
−
</pre>=Eigenes Programm=
 
−
*cat ~/netzkatze.c
 
−
<pre>
 
−
#include <unistd.h>
 
−
#include <stdio.h>
 
  
−
FILE *f;
+
<!----->
 +
[Unit]
 +
Description=Simple Enforcement test
 +
 +
[Service]
 +
Type=simple
 +
ExecStart=/usr/local/bin/netzkatze -lp 8888
 +
StandardOutput=/tmp/netzkatze.log
 +
 +
[Install]
 +
WantedBy=default.target
 +
<span id="temporäre-änderung-des-kontexts"></span>
 +
== Temporäre Änderung des Kontexts ==
  
−
int main(void)
+
* chcon -u system_u -t systemd_unit_t /lib/systemd/system/netzkatze.service
−
{
 
−
while(1) {
 
−
f = fopen("/var/log/messages","w");
 
−
        sleep(5);
 
−
        fclose(f);
 
−
    }
 
−
}
 
−
</pre>
 
−
=Kompilieren=
 
−
*gcc -o netzkatze netzkatze.c
 
−
=Kopieren=
 
−
*cp netzkatze /usr/local/sbin
 
  
−
=System Dienst=
+
<!----->
−
*cat /etc/systemd/system/netzkatze.service
+
<span id="permanente-änderung-des-kontexts"></span>
−
<pre>
+
== Permanente Änderung des Kontexts ==
−
[Unit]
 
−
Description=Simple testing daemon
 
  
−
[Service]
+
* semanage fcontext -a -t systemd_unit_t /lib/systemd/system/netzkatze.service
−
Type=simple
+
* restorecon -v netzkatze.service
−
ExecStart=/usr/local/bin/netzkatze
 
  
−
[Install]
+
<!----->
−
WantedBy=multi-user.target
+
<span id="service-starten"></span>
 +
== Service starten ==
  
−
</pre>
+
* systemctl enable –now netzkatze
 +
* systemctl status netzkatze
  
−
==Temporäre Änderung des Kontexts==
+
<!----->
−
chcon -u system_u -t systemd_unit_t netzkatze.service
+
<span id="einschränkung-überprüfen"></span>
 +
= Einschränkung überprüfen =
  
−
==Permanente Änderung des Kontexts==
+
* ps -eZ | grep netzkatze
−
*semanage fcontext -a -t systemd_unit_t netzkatze.service
 
−
*restorecon -v netzkatze.service
 
−
 
 
−
=Systemctl status=
 
−
*systemctl start netzkatze
 
−
*systemctl status netzkatze
 
−
=Check that the new daemon is confined by SELinux=
 
−
*ps -efZ | grep netzkatze
 
−
system_u:system_r:unconfined_service_t:s0 root 5812    1  0 15:41 ?        00:00:00 /usr/local/bin/netzkatze
 
−
 
 
−
=Generieren Sie eine benutzerdefinierte Richtlinie für den Daemon=
 
−
*sepolicy generate --init /usr/local/bin/netzkatze
 
−
Created the following files:
 
−
/etc/systemd/system/netzkatze.te # Type Enforcement file
 
−
/etc/systemd/system/netzkatze.if # Interface file
 
−
/etc/systemd/system/netzkatze.fc # File Contexts file
 
−
/etc/systemd/system/netzkatze_selinux.spec # Spec file
 
−
/etc/systemd/system/netzkatze.sh # Setup Script
 
−
=Erstellen Sie die Systemrichtlinie mit dem neuen Richtlinienmodul mithilfe des mit dem vorherigen Befehl erstellten Setup-Skripts neu=
 
−
*./netzkatze.sh
 
−
<pre>
 
−
Building and Loading Policy
 
−
+ make -f /usr/share/selinux/devel/Makefile netzkatze.pp
 
−
Compiling targeted netzkatze module
 
−
Creating targeted netzkatze.pp policy package
 
−
rm tmp/netzkatze.mod tmp/netzkatze.mod.fc
 
−
+ /usr/sbin/semodule -i netzkatze.pp
 
−
+ sepolicy manpage -p . -d netzkatze_t
 
−
./netzkatze_selinux.8
 
−
+ /sbin/restorecon -F -R -v /usr/local/bin/netzkatze
 
−
Relabeled /usr/local/bin/netzkatze from unconfined_u:object_r:bin_t:s0 to system_u:object_r:netzkatze_exec_t:s0
 
−
...
 
−
</pre>
 
  
−
=Starten Sie den Daemon neu und überprüfen Sie, ob er jetzt von SELinux eingeschränkt ausgeführt wird=
+
<!----->
−
*systemctl restart netzkatze
+
system_u:system_r:netzkatze_t:s0  3598 ?        00:00:00 netzkatze
−
*ps -efZ | grep netzkatze
+
* ss -Zlt | grep netzkatze
−
=Da der Daemon jetzt von SELinux eingeschränkt wird, verhindert SELinux auch den Zugriff auf /var/log/messages. Zeigen Sie die entsprechende Ablehnungsnachricht an=
 
−
*ausearch -m AVC -ts recent
 
−
=Weiter Informationen=
 
−
*sealert -l "*"
 
−
=Vorgeschlagene Änderungen=
 
−
*ausearch -m AVC -ts recent | audit2allow -R
 
−
=Da die von audit2allow vorgeschlagenen Regeln in bestimmten Fällen falsch sein können, verwenden Sie nur einen Teil der Ausgabe, um die entsprechende Richtlinienschnittstelle zu finden=
 
−
*grep -r "logging_write_generic_logs" /usr/share/selinux/devel/include/ | grep .if
 
−
/usr/share/selinux/devel/include/system/logging.if:interface(`logging_write_generic_logs',
 
  
−
=Links=
+
<!----->
−
*https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_selinux/writing-a-custom-selinux-policy_using-selinux
+
LISTEN 0      1            0.0.0.0:9999      0.0.0.0:*    users:(("netzkatze",pid=3598,proc_ctx=system_u:system_r:netzkatze_t:s0,fd=3))                                                                                                                       
 +
<span id="verstöße-anzeigen"></span>
 +
= Verstöße anzeigen =
  
 +
* ausearch -m AVC -ts recent
  
−
=Starten Sie den Daemon neu und überprüfen Sie, ob er jetzt von SELinux eingeschränkt ausgeführt wird=
+
<!----->
−
*systemctl restart netzkatze
+
----
−
*ps -efZ | grep netzkatze
+
time->Wed Nov 23 11:18:23 2022
−
=Da der Daemon jetzt von SELinux eingeschränkt wird, verhindert SELinux auch den Zugriff auf /var/log/messages. Zeigen Sie die entsprechende Ablehnungsnachricht an=
+
type=AVC msg=audit(1669198703.130:210): avc:  denied  { name_bind } for  pid=3598 comm="netzkatze" src=9999 scontext=system_u:system_r:netzkatze_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=1
−
*ausearch -m AVC -ts recent
+
----
−
=Weiter Informationen=
+
time->Wed Nov 23 11:18:23 2022
−
*sealert -l "*"
+
type=AVC msg=audit(1669198703.130:211): avc:  denied  { node_bind } for  pid=3598 comm="netzkatze" src=9999 scontext=system_u:system_r:netzkatze_t:s0 tcontext=system_u:object_r:node_t:s0 tclass=tcp_socket permissive=1
−
=Vorgeschlagene Änderungen=
+
----
−
*ausearch -m AVC -ts recent | audit2allow -R
+
time->Wed Nov 23 11:18:23 2022
−
=Da die von audit2allow vorgeschlagenen Regeln in bestimmten Fällen falsch sein können, verwenden Sie nur einen Teil der Ausgabe, um die entsprechende Richtlinienschnittstelle zu finden=
+
type=AVC msg=audit(1669198703.130:212): avc:  denied  { listen } for  pid=3598 comm="netzkatze" lport=9999 scontext=system_u:system_r:netzkatze_t:s0 tcontext=system_u:system_r:netzkatze_t:s0 tclass=tcp_socket permissive=1
−
*grep -r "logging_write_generic_logs" /usr/share/selinux/devel/include/ | grep .if
+
----
−
/usr/share/selinux/devel/include/system/logging.if:interface(`logging_write_generic_logs',
+
time->Wed Nov 23 11:18:23 2022
 +
type=AVC msg=audit(1669198703.130:213): avc:  denied  { accept } for  pid=3598 comm="netzkatze" lport=9999 scontext=system_u:system_r:netzkatze_t:s0 tcontext=system_u:system_r:netzkatze_t:s0 tclass=tcp_socket permissive=1
 +
<span id="vorgeschlagene-änderungen"></span>
 +
= Vorgeschlagene Änderungen =
  
−
=Links=
+
* ausearch -m AVC -ts recent | audit2allow -R
−
*https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_selinux/writing-a-custom-selinux-policy_using-selinux
 

Version vom 23. November 2022, 10:25 Uhr

Kopieren der Netzkatze

  • cp /usr/bin/ncat /usr/local/bin/netzkatze

Benutzerdefiniert Richtlinie für das Programm “netzkatze” generieren

  • sepolicy generate –init /usr/local/bin/netzkatze
Failed to retrieve rpm info for selinux-policy
Created the following files:
/root/selinux/modules/netzkatze/netzkatze.te # Typ-Enforcement-Datei
/root/selinux/modules/netzkatze/netzkatze.if # Schnittstellendatei
/root/selinux/modules/netzkatze/netzkatze.fc # Dateikontext-Datei
/root/selinux/modules/netzkatze/netzkatze_selinux.spec # Spezifikationsdatei
/root/selinux/modules/netzkatze/netzkatze.sh # Einrichtungsskript

Einrichten des neuen Richtlinienmoduls mithilfe des erzeugten Setup-Skripts

  • ./netzkatze
Building and Loading Policy
\+ make -f /usr/share/selinux/devel/Makefile netzkatze.pp
Compiling default netzkatze module
Creating default netzkatze.pp policy package
rm tmp/netzkatze.mod tmp/netzkatze.mod.fc
\+ /usr/sbin/semodule -i netzkatze.pp
libsemanage.add_user: user sddm not in password file
\+ sepolicy manpage -p . -d netzkatze_t
./netzkatze_selinux.8
\+ /sbin/restorecon -F -R -v /usr/local/sbin/netzkatze
Relabeled /usr/local/sbin/netzkatze from unconfined_u:object_r:bin_t:s0 to system_u:object_r:netzkatze_exec_t:s0
\+ pwd
\+ pwd=/root/selinux/modules/netzkatze
\+ rpmbuild --define \_sourcedir /root/selinux/modules/netzkatze --define \_specdir /root/selinux/modules/netzkatze --define \_builddir /root/selinux/modules/netzkatze --define \_srcrpmdir /root/selinux/modules/netzkatze --define \_rpmdir /root/selinux/modules/netzkatze --define \_buildrootdir /root/selinux/modules/netzkatze/.build -ba netzkatze\_selinux.spec
./netzkatze.sh: 52: rpmbuild: not found

Systemd-Dienst erstellen

  • cat /lib/systemd/system/netzkatze.service
[Unit]
Description=Simple Enforcement test

[Service]
Type=simple
ExecStart=/usr/local/bin/netzkatze -lp 8888
StandardOutput=/tmp/netzkatze.log

[Install]
WantedBy=default.target

Temporäre Änderung des Kontexts

  • chcon -u system_u -t systemd_unit_t /lib/systemd/system/netzkatze.service

Permanente Änderung des Kontexts

  • semanage fcontext -a -t systemd_unit_t /lib/systemd/system/netzkatze.service
  • restorecon -v netzkatze.service

Service starten

  • systemctl enable –now netzkatze
  • systemctl status netzkatze

Einschränkung überprüfen

  • ps -eZ | grep netzkatze
system_u:system_r:netzkatze_t:s0   3598 ?        00:00:00 netzkatze
  • ss -Zlt | grep netzkatze
LISTEN 0      1            0.0.0.0:9999      0.0.0.0:*    users:(("netzkatze",pid=3598,proc_ctx=system_u:system_r:netzkatze_t:s0,fd=3))                                                                                                                         

Verstöße anzeigen

  • ausearch -m AVC -ts recent
----
time->Wed Nov 23 11:18:23 2022
type=AVC msg=audit(1669198703.130:210): avc:  denied  { name_bind } for  pid=3598 comm="netzkatze" src=9999 scontext=system_u:system_r:netzkatze_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=1
----
time->Wed Nov 23 11:18:23 2022
type=AVC msg=audit(1669198703.130:211): avc:  denied  { node_bind } for  pid=3598 comm="netzkatze" src=9999 scontext=system_u:system_r:netzkatze_t:s0 tcontext=system_u:object_r:node_t:s0 tclass=tcp_socket permissive=1
----
time->Wed Nov 23 11:18:23 2022
type=AVC msg=audit(1669198703.130:212): avc:  denied  { listen } for  pid=3598 comm="netzkatze" lport=9999 scontext=system_u:system_r:netzkatze_t:s0 tcontext=system_u:system_r:netzkatze_t:s0 tclass=tcp_socket permissive=1
----
time->Wed Nov 23 11:18:23 2022
type=AVC msg=audit(1669198703.130:213): avc:  denied  { accept } for  pid=3598 comm="netzkatze" lport=9999 scontext=system_u:system_r:netzkatze_t:s0 tcontext=system_u:system_r:netzkatze_t:s0 tclass=tcp_socket permissive=1

Vorgeschlagene Änderungen

  • ausearch -m AVC -ts recent | audit2allow -R