noqqe


blog | sammelsurium | projects | about

OpenBSD Login Classes

2016-07-09 @ administration, bsd, login, maxfiles, openbsd, ulimit

Mit Login Classes lassen sich allerhand Limitierungen für Benutzer und Gruppen in OpenBSD regeln. Wer also bei seinem Webserver auf das OpenFiles Limit läuft oder beim Compilen von Software XY einen OutOfMemory Fehler bekommt sollte sich das mal anschauen. Hier lassen sich auch Authentication Methods und ganz viel anderer Kram definieren. Die Manpage würde ich jedem mal empfehlen.

$ doas vim /etc/login.conf
staff:\
    :umask=022:\
    :datasize-max=1024M:\
    :datasize-cur=1024M:\
    :maxproc-max=1024:\
    :maxproc-cur=1024:\
    :openfiles-cur=2048:\
    :openfiles-max=2048:\
    :stacksize-cur=4M:\
    :localcipher=blowfish,8:\
    :tc=auth-defaults:\
    :tc=auth-ftp-defaults:

Aber welche Klasse hat mein User eigentlich? Dafür gibt es eine extra Spalte in der /etc/passwd.

    $ userinfo noqqe
    login   noqqe
    passwd  *
    uid     1001
    groups  noqqe wheel
    change  NEVER
    class
    gecos   ,,,
    dir     /home/noqqe
    shell   /usr/local/bin/bash
    expire  NEVER

Aha. Keine also. Wie assigne ich meinem User so eine Grouppe? Mit chsh. Das geht bestimmt auch noch anders, aber in dem meinsten Fällen arbeite ich mit dem Tool.

$ chsh noqqe
...
class: staff
...

Gut. Nachdem mir die Werte immernoch nicht gefallen, muss ich die login.conf doch noch anpassen. Einfach die Gruppe an sich editieren und das DB File neu bauen.

    $ vim /etc/login.conf
    # build new db
    $ sudo cap_mkdb /etc/login.conf

Erstmal stehts da jetzt. Ob das auch wirklich geklappt hat (zumindest die Formatierung des Files) kann man überprüfen in dem man ein bestimmtes Attribut einer Klasse überprüft.

    $ getcap -f /etc/login.conf -s openfiles-max staff
    4096

Alles klar, das hat geklappt. Das unangenehme bei der Sache ist, dass das neue Limit erst beim nächsten Login greift. Also neue ksh starten reicht nicht. Es muss ein neues TTY her. Bei Daemons wusste ich mir bisher nicht anders zu helfen, als kurz zu rebooten. Irgendwelche Ideen?

    $ ulimit -a
    core file size          (blocks, -c) unlimited
    data seg size           (kbytes, -d) 1572864
    file size               (blocks, -f) unlimited
    max locked memory       (kbytes, -l) 331942
    max memory size         (kbytes, -m) 993656
    open files                      (-n) 4096
    pipe size            (512 bytes, -p) 1
    stack size              (kbytes, -s) 4096
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 256
    virtual memory          (kbytes, -v) 1576960

ulimit ist hier (wie auch bei Linux) das mittel der Wahl um die neu gesetzten Limits zu überprüfen.

Benutzereinschränkungen über die login.conf wirken irgendwie stabiler und sicherer als ulimit Statements in irgendwelche /etc/profile wie man es bei Linux so kennt. Auch die 1000 anderen Features die das System bietet muss ich mir unbedingt noch anschauen.