systrace Policies funktionieren nicht

quantumleeks

Anfänger
Hi! Unter OpenBSD-CURRENT möchte ich eine einfache systrace Policy anwenden: Der Befehll ls soll einem per ssh eingeloggten User verbieten, das Verzeichnis /etc zu listen.

Eigentlich ganz einfach, aber ich stehe gerade auf dem Schlauch. Ein

Code:
# systrace -A /bin/ls
führt zu der Policy

Code:
Policy: /bin/ls, Emulation: native
        native-__sysctl: permit
        native-mmap: permit
        native-mprotect: permit
        native-ioctl: permit
        native-getuid: permit
        native-fsread: filename eq "/etc/malloc.conf" then permit
        native-issetugid: permit
        native-fsread: filename eq "/export/usr/quantumleeks/." then permit
        native-fchdir: permit
        native-fstat: permit
        native-fcntl: permit
        native-getdirentries: permit
        native-lseek: permit
        native-close: permit
        native-write: permit
        native-munmap: permit
        native-exit: permit

So weit, so gut. Jetzt habe ich die Zeilen

Code:
native-fsread: filename eq "/etc/." then deny
native-fsread: filename eq "/etc/pwd.db" then permit
hinzugefügt und diese Datei nach /etc/systrace/bin_ls kopiert. Trotzdem kann ich nach einem

Code:
# systrace -a /bin/ls
immer noch mit ls in das Verzeichnis /etc hineinsehen. Ich glaube, ich habe da ein kleines grundsätzliches Verständnisproblem. Was ich auch nicht begreife: Wenn diese Policy unter /etc/systrace steht, gilt sie dann nicht automatisch auch für root? Sie soll aber nur für ganz bestimmte User gelten.

Wäre schön, wenn mir mal jemand etwas auf die Sprünge helfen könnte.
 
man systrace:

Policy entries may contain an appended predicate. Predicates have the
following format:

", if" {"user", "group"} {"=", "!=", "<", ">" } {number, string}

also

Code:
native-fsread: filename eq "/etc" then deny, if group = DENY_LS
 
Habe ich jetzt gemacht, d. h. die Usergroup, für die das Verbot gelten soll, in die Regel mit aufgenommen:

Code:
native-fsread: filename eq "/etc" then deny, if group = 5000
Funktioniert trotzdem nicht. Ich kann (als User mit der group id 5000) immer noch in /etc reingucken. Auch wenn ich statt "if group = 5000" "if user = 5000" schreibe (wobei meine User Id ebenfalls den numerischen Wert 5000 hat), verbietet mir systrace immer noch nicht den Blick nach /etc.
 
Versuche testweise mal mit match:
Code:
native-fsread: filename match "/etc/*" then deny, if group = 5000
Oder verwende statt der GID den Gruppennamen. (Hatte schon länger nichts mehr damit zu tun, daher ohne Gewähr.)
 
Ich will ja keinen ärgern oder jemandem auf die Nerven gehen, aber auch damit funktioniert es nicht. Systrace funktioniert auf meiner Installation einfach nicht. In den Logs unter /var/logs/messages steht folgendes:

Code:
Feb 13 18:46:02 obelix systrace: deny user: quantumleeks, prog: /bin/ls, pid: 27644(0)[0], policy: /bin/ls, filters: 0, syscall: native-sigaction(46), args: 12
Feb 13 18:46:02 obelix systrace: deny user: quantumleeks, prog: /bin/ls, pid: 27644(0)[0], policy: /bin/ls, filters: 0, syscall: native-sigprocmask(48), args: 8
Feb 13 18:46:02 obelix systrace: deny user: quantumleeks, prog: /bin/ls, pid: 27644(0)[0], policy: /bin/ls, filters: 0, syscall: native-getpid(20), args: 0
Feb 13 18:46:02 obelix systrace: deny user: quantumleeks, prog: /bin/ls, pid: 27644(0)[0], policy: /bin/ls, filters: 0, syscall: native-kill(37), pidname:
Aber ich kann unter meinem Login trotzdem in /etc reinschauen.
 
Zurück
Oben