1: [[!meta title="A Keylock Security Model for kauth(9)"]]
2:
3: Recently, generic support for electro-mechanical multi-position keylocks
4: in the kernel has been added to NetBSD. Such locks can be turned into
5: various positions, usually up to three or four position. They come with
6: a set of keys that are different in so far as not all positions can be
7: reached with all keys (which key can go up to which position is called
8: the "locking program"). With the new keylock support, such locks can be
9: used to tinker with the kernel security, much like the traditional
10: securelevel variable...
11:
12: The number of keylock positions, the current keylock position, and the
13: overall keylock state can be read within the kernel using a set of
14: functions defined in
15: [keylock.h](http://cvsweb.de.netbsd.org/cgi-bin/cvsweb.cgi/src/sys/dev/keylock.h?rev=HEAD)
16: and userland
17: can access them through the <b>hw.keylock</b> sysctl hierarchy.
18:
19: The following components have been added:
20:
21: * <b>[gpiolock(4)](http://netbsd.gw.com/cgi-bin/man-cgi?gpiolock+4+NetBSD-current)</b>
22: a driver for GPIO attached keylocks.
23: The driver registers with the in-kernel keylock "subsystem". See
24: [gpiolock.c](http://cvsweb.de.netbsd.org/cgi-bin/cvsweb.cgi/src/sys/dev/gpio/gpiolock.c?rev=HEAD).
25:
26: * <b>secmodel_keylock</b>, a {{manual page|kauth|9}} security model that
27: authorizes based on the keylock "closedness". Wheter the rightmost
28: (default) or leftmost position of the keylock means open can be
29: controlled using the '''hw.keylock.order''' sysctl variable. This
30: variable can only be changed if the keylock state is OPEN. See
31: [secmodel_keylock.c](http://cvsweb.de.netbsd.org/cgi-bin/cvsweb.cgi/src/sys/secmodel/keylock/secmodel_keylock.c?rev=HEAD).
32:
33: The security model is started when a keylock driver registers and
34: stopped when there is no more keylock driver. The keylock security
35: model is optional, keylock support can be used without the security
36: model as well (e.g. to provide keylock state to a userland applications.
37: Useful e.g. for POS applications).
38:
39: The keylock state interpretation is done in
40: [keylock.c](http://cvsweb.de.netbsd.org/cgi-bin/cvsweb.cgi/src/sys/dev/keylock.c?rev=HEAD)
41: and not in the driver itself. This
42: allows for adding support for multiple keylocks in the future. The
43: hw.keylock.pos and hw.keylock.npos sysctl variable have debugging
44: character, the hw.keylock.state variable reflects the state and should
45: be used.
46:
47: Currently, the keylock positions are interpreted as follows: There are
48: maximum four positions, OPEN, SEMIOPEN, SEMICLOSE, CLOSE. What exactly
49: that means leaves room for interpretation right now.... (experience will
50: show what makes sense in the end).
51:
52: To enable the keylock support, the keylock security model, and the
53: {{manual page|gpiolock|4|}} driver, add the following lines to your
54: kernel configuration file:
55:
56: options KEYLOCK
57: options secmodel_keylock
58: gpiolock* at gpio?
59:
60: Of course you must have at least one GPIO device in your system for the
61: {{manual page|gpiolock|4|}} driver to work and the lock must be
62: connected properly.
63:
64: <b>Please keep in mind that this is an experimental feature...</b>
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb