Chapter 5. Authorization Controls
Authorization
means deciding what a user may or may not do on a computer: for
example, reading particular files, running particular programs, or
connecting to particular network ports. Typically, permission is
granted based on a credential such as a password or cryptographic
key.
The
superuser root, with uid
0, has full control over every file, directory, port, and dust
particle on the computer. Therefore, your big, security-related
authorization questions are:
Most commonly, anyone knowing your root
password
has superuser powers, which are granted with the
su command:
$ su
Password: *******
#
This technique is probably fine for a single person with one
computer. But if you're a superuser on multiple
machines, or if you have several superusers, things get more
complicated. What if you want to give temporary or limited root
privileges to a user? What if one of your superusers goes berserk:
can you revoke his root privileges without impacting other
superusers? If these tasks seem inconvenient or difficult, your
system might benefit from additional infrastructure for
authorization.
Here are some common infrastructures and our opinions of them:
- Sharing the root password
-
This is conceptually the simplest, but giving every superuser full
access to everything is risky. Also, to revoke a rogue
superuser's access you must change the root
password, which affects all other superusers. Consider a finer
grained approach. When cooking a hamburger, after all, a flamethrower
will work but a simple toaster oven might be
more appropriate.
- Multiple root accounts
-
Make
several accounts with uid 0 and gid
0, but different usernames and passwords.
/etc/passwd:
root:x:0:0:root:/root:/bin/bash
root-bob:x:0:0:root:/root:/bin/bash
root-sally:x:0:0:root:/root:/bin/bash
root-vince:x:0:0:root:/root:/bin/bash
We do not recommend this method. It provides finer control than
sharing the root password, but it's less powerful
than the later methods we'll describe. Plus
you'll break some common scripts that check for the
literal username "root" before
proceeding. See our recipe for locating superuser accounts so you can
replace them and use another method. [Recipe 9.4]
- sudo
-
Most of
this chapter is devoted to sudo recipes. This
package has a system-wide configuration file,
/etc/sudoers, that specifies precisely which Linux
commands may be invoked by given users on particular hosts with
specific privileges. For example, the sudoers
entry:
/etc/sudoers:
smith myhost = (root) /usr/local/bin/mycommand
means that user smith may invoke the command
/usr/local/bin/mycommand on host myhost as user root. User smith can now
successfully invoke this program by:
smith$ sudo -u root /usr/local/bin/mycommand
sudo lets you easily give out and quickly revoke
root privileges without revealing the root password. (Users
authenticate with their own passwords.) It also supports
logging so you can discover who ran
which programs via sudo. On the down side,
sudo turns an ordinary user password into a
(possibly limited) root password. And you must configure it
carefully, disallowing arbitrary root commands and arbitrary argument
lists, or else you can open holes in your system.
- SSH
-
The
Secure
Shell can authenticate superusers by public key and let them execute
root commands locally or remotely. Additionally, restricted
privileges can be granted using SSH forced commands. The previous
sudoers example could be achieved by SSH as:
~root/.ssh/authorized_keys:
command="/usr/local/bin/mycommand" ssh-dss fky7Dj7bGYxdHRYuHN ...
and the command would be invoked something like this:
$ ssh -l root -i private_key_name localhost
-
Kerberos ksu
-
If your environment has a Kerberos infrastructure, you can use
ksu, Kerberized su, for
authorization. Like sudo, ksu
checks a configuration file to make authorization decisions, but the
file is per user rather than per system. That is, if user emma wants
to invoke a command as user ben, then ben must grant this permission
via configuration files in his account:
~ben/.k5login:
[email protected]
~ben/.k5users:
[email protected] /usr/local/bin/mycommand
and emma would invoke it as:
emma$ ksu ben -e mycommand
Like SSH, ksu also performs strong authentication
prior to authorization. Kerberos is installed by default in Red Hat
8.0 but not included with SuSE 8.0.
|