BSD Secure Levels Linux Security Module
Michael A. Halcrow <mike@halcrow.us>


Introduction

Under the BSD Secure Levels security model, sets of policies are
associated with levels. Levels range from -1 to 2, with -1 being the
weakest and 2 being the strongest. These security policies are
enforced at the kernel level, so not even the superuser is able to
disable or circumvent them. This hardens the machine against attackers
who gain root access to the system.


Levels and Policies

Level -1 (Permanently Insecure):
 - Cannot increase the secure level

Level 0 (Insecure):
 - Cannot ptrace the init process

Level 1 (Default):
 - /dev/mem and /dev/kmem are read-only
 - IMMUTABLE and APPEND extended attributes, if set, may not be unset
 - Cannot load or unload kernel modules
 - Cannot write directly to a mounted block device
 - Cannot perform raw I/O operations
 - Cannot perform network administrative tasks
 - Cannot setuid any file

Level 2 (Secure):
 - Cannot decrement the system time
 - Cannot write to any block device, whether mounted or not
 - Cannot unmount any mounted filesystems


Compilation

To compile the BSD Secure Levels LSM, seclvl.ko, enable the
SECURITY_SECLVL configuration option.  This is found under Security
options -> BSD Secure Levels in the kernel configuration menu.


Basic Usage

Once the machine is in a running state, with all the necessary modules
loaded and all the filesystems mounted, you can load the seclvl.ko
module:

# insmod seclvl.ko

The module defaults to secure level 1, except when compiled directly
into the kernel, in which case it defaults to secure level 0. To raise
the secure level to 2, the administrator writes ``2'' to the
seclvl/seclvl file under the sysfs mount point (assumed to be /sys in
these examples):

# echo -n "2" > /sys/seclvl/seclvl

Alternatively, you can initialize the module at secure level 2 with
the initlvl module parameter:

# insmod seclvl.ko initlvl=2

At this point, it is impossible to remove the module or reduce the
secure level.  If the administrator wishes to have the option of doing
so, he must provide a module parameter, sha1_passwd, that specifies
the SHA1 hash of the password that can be used to reduce the secure
level to 0.

To generate this SHA1 hash, the administrator can use OpenSSL:

# echo -n "boogabooga" | openssl sha1
abeda4e0f33defa51741217592bf595efb8d289c

In order to use password-instigated secure level reduction, the SHA1
crypto module must be loaded or compiled into the kernel:

# insmod sha1.ko

The administrator can then insmod the seclvl module, including the
SHA1 hash of the password:

# insmod seclvl.ko
         sha1_passwd=abeda4e0f33defa51741217592bf595efb8d289c

To reduce the secure level, write the password to seclvl/passwd under
your sysfs mount point:

# echo -n "boogabooga" > /sys/seclvl/passwd

The September 2004 edition of Sys Admin Magazine has an article about
the BSD Secure Levels LSM.  I encourage you to refer to that article
for a more in-depth treatment of this security module:

http://www.samag.com/documents/s=9304/sam0409a/0409a.htm
