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