| # Notes concerning wider use of capabilities |
| |
| ## Overview |
| |
| **NOTE** These notes were added to the libcap package in |
| libcap-1.03. They pre-date file capability support, but fully |
| anticipate it. They are some thoughts on how to restructure a system |
| to better leverage capability support. I've updated them to render as |
| an `.md` formatted file. |
| |
| As of Linux 2.2.0, the power of the superuser has been partitioned |
| into a set of discrete capabilities (in other places, these |
| capabilities are know as privileges). |
| |
| The contents of the libcap package are a library and a number of |
| simple programs that are intended to show how an application/daemon |
| can be protected (with wrappers) or rewritten to take advantage of |
| this fine grained approach to constraining the danger to your system |
| from programs running as 'root'. |
| |
| ## Notes on securing your system |
| |
| ### Adopting a role approach to system security |
| |
| Changing all of the system binaries and directories to be owned by |
| some user that cannot log on. You might like to create a user with |
| the name 'system' who's account is locked with a '*' password. This |
| user can be made the owner of all of the system directories on your |
| system and critical system binaries too. |
| |
| Why is this a good idea? In a simple case, the `CAP_FOWNER` capability |
| is required for the superuser to delete files owned by a non-root user |
| in a _sticky-bit_ protected non-root owned directory. Thus, the sticky |
| bit can help you protect the `/lib/` directory from a compromized |
| daemon where the directory and the files it contains are owned by the |
| system user. It can be protected to ensure that the daemon is not |
| running with the `CAP_FOWNER` capability... |
| |
| ### Limiting the damage |
| |
| If your daemon only needs to be setuid-root in order to bind to a low |
| numbered port. You should restrict it to only having access to the |
| `CAP_NET_BIND_SERVICE` capability. Coupled with not having any files |
| on the system owned by root, it becomes significantly harder for such |
| a daemon to damage your system. |
| |
| Note, you should think of this kind of trick as making things harder |
| for a potential attacker to exploit a hole in a daemon of this |
| type. Being able to bind to any privileged port is still a formidable |
| privilege and can lead to difficult but _interesting_ |
| man-in-the-middle attacks -- hijack the telnet port for example and |
| masquerade as the login program... Collecting passwords for another |
| day. |
| |
| ### The /proc/ filesystem |
| |
| This Linux-specific directory tree holds most of the state of the |
| system in a form that can sometimes be manipulated by file |
| read/writes. Take care to ensure that the filesystem is not mounted |
| with uid=0, since root (with no capabilities) would still be able to |
| read sensitive files in the `/proc/` tree - `kcore` for example. |
| |
| [Patch is available for 2.2.1 - I just wrote it!] |