7.2. Creación y aplicación de una política SELinux para una aplicación personalizada
Este procedimiento de ejemplo proporciona los pasos para confinar un simple demonio mediante SELinux. Sustituya el demonio por su aplicación personalizada y modifique la regla de ejemplo según los requisitos de esa aplicación y su política de seguridad.
Requisitos previos
-
El paquete
policycoreutils-devel
y sus dependencias están instalados en su sistema.
Procedimiento
Para este procedimiento de ejemplo, prepare un demonio simple que abra el archivo
/var/log/messages
para escribir:Cree un nuevo archivo y ábralo en un editor de texto de su elección:
vi mydaemon.c
$ vi mydaemon.c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Inserte el siguiente código:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Compilar el archivo:
gcc -o mydaemon mydaemon.c
$ gcc -o mydaemon mydaemon.c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cree un archivo de unidad
systemd
para su demonio:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Instalar e iniciar el demonio:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Comprueba que el nuevo demonio no está limitado por SELinux:
ps -efZ | grep mydaemon
$ ps -efZ | grep mydaemon system_u:system_r:unconfined_service_t:s0 root 4117 1 0 16:56 ? 00:00:00 /usr/local/bin/mydaemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Generar una política personalizada para el demonio:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reconstruya la política del sistema con el nuevo módulo de política utilizando el script de configuración creado por el comando anterior:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Tenga en cuenta que el script de configuración reetiqueta la parte correspondiente del sistema de archivos mediante el comando
restorecon
:restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/system
restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reinicie el demonio, y compruebe que ahora se ejecuta confinado por SELinux:
systemctl restart mydaemon ps -efZ | grep mydaemon
# systemctl restart mydaemon $ ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dado que el demonio está ahora confinado por SELinux, éste también le impide acceder a
/var/log/messages
. Muestra el mensaje de denegación correspondiente:ausearch -m AVC -ts recent
# ausearch -m AVC -ts recent ... type=AVC msg=audit(1590247112.719:5935): avc: denied { open } for pid=8150 comm="mydaemon" path="/var/log/messages" dev="dm-0" ino=2430831 scontext=system_u:system_r:mydaemon_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file permissive=1 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow También puede obtener información adicional utilizando la herramienta
sealert
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Utilice la herramienta
audit2allow
para sugerir cambios:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dado que las reglas sugeridas por
audit2allow
pueden ser incorrectas para ciertos casos, utilice sólo una parte de su salida para encontrar la interfaz de política correspondiente:grep -r "logging_write_generic_logs" /usr/share/selinux/devel/include/ | grep .if
$ 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',
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Compruebe la definición de la interfaz:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow En este caso, puede utilizar la interfaz sugerida. Añada la regla correspondiente a su archivo de aplicación de tipos:
echo "logging_write_generic_logs(mydaemon_t)" >> mydaemon.te
$ echo "logging_write_generic_logs(mydaemon_t)" >> mydaemon.te
Copy to Clipboard Copied! Toggle word wrap Toggle overflow También puede añadir esta regla en lugar de utilizar la interfaz:
echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.te
$ echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.te
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vuelva a instalar la política:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Pasos de verificación
Compruebe que su aplicación se ejecuta confinada por SELinux, por ejemplo:
ps -efZ | grep mydaemon
$ ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Compruebe que su aplicación personalizada no causa ninguna denegación de SELinux:
ausearch -m AVC -ts recent
# ausearch -m AVC -ts recent <no matches>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Recursos adicionales
-
Para más información, consulte las páginas de manual
sepolgen(8)
,ausearch(8)
,audit2allow(1)
,audit2why(1)
,sealert(8)
yrestorecon(8)
.