SELinux blockiert die Ausführung von Dspam durch Procmail, aber keine AVC-Nachricht

SELinux blockiert die Ausführung von Dspam durch Procmail, aber keine AVC-Nachricht

Ich habe ein CentOS 7-System, in dem ich Postfix als MTA verwende. Bestimmte Benutzer verwenden Procmail über .forwardihre Home-Verzeichnisse:

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

In diesem Fall kann ich nicht verstehen, warum SELinux es procmail nicht erlaubt, dspam von folgendem Pfad auszuführen .procmailrc:

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

Im Procmail-Protokoll erhalte ich:

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"

Wenn ich SELinux jedoch auf den permissiven Modus einstelle, funktioniert es einwandfrei.

Das Problem ist, dass keine AVC-Meldungen darüber protokolliert werden, was abgelehnt wird. Als ich die Dinge zum ersten Mal einrichtete, fand ich einige Lücken über audit2whyund ausearchund habe sie behoben. Jetzt bekomme ich nichts, obwohl es eindeutig SELinux ist, das verhindert, dass es funktioniert.

Bearbeiten: Hier ist die dspam-Binärdatei:

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

Antwort1

Ich habe ein sehr ähnliches Problem. In meinem Fall verhindert Selinux stillschweigend die Ausführung von Code in meinem .procmailbin-Ordner (ich habe den Standardkontext für .procmailbin bereits auf procmail_exec_t festgelegt).

Ich habe das Problem noch nicht ganz gelöst, aber ich glaube, der Weg zur Lösung besteht darin, selinux anzuweisen, zu meldenalleAblehnungen, was es tutnichtstandardmäßig tun.

Um die vollständige Meldung aller Ablehnungen zu aktivieren, verwenden Sie Folgendes:

semodule --disable_dontaudit --build

Überprüfen Sie audit.log und verwenden Sie gegebenenfalls sealert, um festzustellen, was los ist.

Um anschließend den Normalzustand wiederherzustellen, verwenden Sie:

semodule --build

Viel Glück! In meinem Fall bin ich an dem Punkt angelangt, an dem Sealert mir diese Informationen anzeigt, die vorher nicht erschienen sind:

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

... aber ich muss noch prüfen, ob dies das tatsächliche Problem ist und was die beste Lösung ist.

Update: Es stellte sich heraus, dass dies das Problem für mich gelöst hat.

Hier sind die Inhalte des benutzerdefinierten Moduls, das ich erstellt habe:

# 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;

Meiner Meinung nach sollte dies das Standardverhalten sein, also werde ich wohl versuchen herauszufinden, wem ich diesen „Fehler“ melden kann.

Antwort2

Nachdem ich mir Chris Bennetts Antwort angesehen hatte, habe ich Folgendes verwendet semodule --disable_dontauditund konnte herausfinden, was ich brauchte. Hier ist, was ich am Ende hatte, damit Postfix+Procmail+Dspam funktioniert:

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;

verwandte Informationen