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.