Sudoscriptd/sudoshell
are a pair of Perl scripts that provide an audited shell using sudo If
you are familiar with sudo, you might well ask "doesn't running a
shell under sudo defeat the purpose of the tool?" Yes and no. One
reason for running sudo is to limit what commands can be run by users.
These scripts do indeed defeat that purpose. But another reason to run
sudo is to maintain an audit trail of commands issued by users with root
privilege. These scripts preserve that audit trail by logging all terminal
output to log files.
Though giving a user an unrestricted root shell
allows them to evade auditing innocently (by running an xterm for example)
or maliciously (by changing the root password to give just one of way
too many examples), you may have no choice but to give your users such
a shell. This may be because they truly need the flexibility of a root
shell, or just because they think they do and can convince their managers
to let them have it. Either way, you are stuck with losing your audit
trail or using something like this tool.
The Details
Sudoshell (also ss) is a small Perl script that works in conjunction with
a logging daemon, sudoscriptd, to log all activity within a root shell.
It uses the Unix script(1) command to create the log. Once invoked, all
console commands and output are logged to a fifo. The logging daemon reads
from this fifo and manages log files to store the data produced. The logs
are rotated to ensure that they do not overflow the disk space on the
logging partition. Sudoshell checks to see if the daemon is running and
offers to start it if it is not. (It does this with sudo, so you need
to have sudo access to perform this step.) Sudoshell then checks to see
if it has been run with root privilege, via 'sudo sudoshell' or otherwise.
If not, it reinvokes itself using sudo. The script then checks the user's
SHELL environment variable. If the value of this variable doesn't match
one of the shells listed in /etc/shells, sudoshell refuses to run. Next
the logging fifo is checked. If it exists, sudoshell runs the script command
using the fifo as the typescript. If it doesn't exist, sudoshell exits
The Really Picky Details
I have written a paper, published in the August 2002 issue of ;login,
that details the experiences that led up to writing sudoscript. The paper
is called "The Problem of PORCMOLSULB" and can be retrieved
here as HTML or as PDF.
The XML source, DTD and stylesheets are in the sudoscript
distribution
|