SELinux bloquea la ejecución de procmail de dspam pero no muestra ningún mensaje AVC

SELinux bloquea la ejecución de procmail de dspam pero no muestra ningún mensaje AVC

Tengo un sistema CentOS 7 en el que uso postfix como MTA. Ciertos usuarios utilizan procmail vía .forwarden sus directorios personales:

# cat .forward
"|exec /usr/bin/procmail -f- || exit 75"

En este caso, tengo dificultades para entender por qué SELinux no permitirá que procmail ejecute dspam desde .procmailrc:

:0fw: dspam.lock
| /usr/bin/dspam --client --stdout --deliver=spam,innocent

En el registro de procmail obtengo:

procmail: Locking "dspam.lock"
procmail: Executing "/usr/bin/dspam,--client,--stdout,--deliver=spam,innocent"
/bin/sh: /usr/bin/dspam: Permission denied
procmail: Program failure (126) of "/usr/bin/dspam"
procmail: Rescue of unfiltered data succeeded
procmail: Unlocking "dspam.lock"

Sin embargo, si configuro SELinux en modo permisivo, funciona bien.

El problema es que no registra ningún mensaje AVC sobre lo que se niega. Cuando estaba configurando las cosas por primera vez, encontré algunas lagunas audit2whyy ausearchlas solucioné. Ahora no obtengo nada, aunque claramente es SELinux el que impide que funcione.

Editar: Aquí está el binario dspam:

# ls -lZ /usr/bin/dspam
-r-x--s--x. dspam mail system_u:object_r:dspam_exec_t:s0 /usr/bin/dspam

Respuesta1

Tengo un problema muy similar. En mi caso, selinux impide silenciosamente que se ejecute el código en mi carpeta .procmailbin (ya configuré el contexto predeterminado para .procmailbin en procmail_exec_t).

Todavía no he resuelto el problema, pero creo que el camino hacia la respuesta es indicarle a Selinux que informetodonegaciones, lo cual hacenohacer por defecto.

Para habilitar el informe completo de todas las denegaciones, utilice lo siguiente:

semodule --disable_dontaudit --build

Revise audit.log y utilice sealert según corresponda para determinar qué está sucediendo.

Luego, para que todo vuelva a la normalidad cuando termine, utilice:

semodule --build

¡Buena suerte! En mi caso estoy a punto de sellarert mostrándome esta información que antes no aparecía:

SELinux is preventing sh from search access on the directory /home/chris/.procmailbin.

*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that sh should be allowed search access on the .procmailbin directory by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'sh' --raw | audit2allow -M my-sh
# semodule -X 300 -i my-sh.pp

... pero aún necesito revisar si este es el problema real y cuál es la mejor solución.

Actualización: Resulta que esto me solucionó el problema.

Aquí está el contenido del módulo personalizado que construí:

# more procmailbin-sh-search.te

module my-sh 1.0;

require {
        type dmesg_t;
        type procmail_t;
        type procmail_exec_t;
        type abrt_t;
        class dir search;
        class process noatsecure;
}

#============= abrt_t ==============
allow abrt_t dmesg_t:process noatsecure;

#============= procmail_t ==============
allow procmail_t procmail_exec_t:dir search;

Me parece que este debería ser el comportamiento predeterminado, así que supongo que veré si puedo averiguar a quién informar este "error".

Respuesta2

Entonces, después de mirar la respuesta de Chris Bennett, la usé semodule --disable_dontaudity pude descubrir lo que necesitaba. Esto es lo que terminé para hacer que postfix+procmail+dspam funcione:

require {
    type dspam_rw_content_t;
    type dspam_t;
    type dspam_exec_t;
    type procmail_t;
    class dir { open read write getattr add_name search };
    class file { append getattr lock open read write setgid };
    class unix_stream_socket connectto;
}

#============= dspam_t ==============
allow dspam_t dspam_rw_content_t:dir { open read write getattr add_name search };
allow dspam_t dspam_rw_content_t:file { append getattr lock open write };

#============= procmail_t ==============
allow procmail_t dspam_exec_t:file { open read setgid };
allow procmail_t dspam_t:unix_stream_socket connectto;

información relacionada