syslog + chroot + ftpd
Dan Bernstein
brnstnd at kramden.acf.nyu.edu
Wed Aug 1 13:35:08 AEST 1990
In article <1990Jul31.141746.27004 at athena.mit.edu> jik at athena.mit.edu (Jonathan I. Kamens) writes:
> In article <11477:Jul3018:50:4290 at kramden.acf.nyu.edu>, brnstnd at kramden.acf.nyu.edu (Dan Bernstein) writes:
> |> Now you're making unsupported assertions. In what conceivable way can
> |> syslog() do better than stderr?
> You seem to be suggesting that all programs output errors to stderr, and
> daemons that need to do some sort of logging have their stderr piped through a
> program that knows how to process those error messages.
Yup. (Wow, what a revolutionary idea.)
Let me make three general points first, then address your objections in
their light.
A. A program may invoke a pipe or otherwise avoid stderr if it wants.
B. Multiple processes may send output into one pipe.
C. Pipes are as little work for the system as named UNIX-domain sockets.
> 1. It requires an extra process running for every daemon that's going to spit
> out errors.
No. See B and C. If you want, you can set up named pipes or sockets
/dev/log*, each feeding into a different type of error processor; as
this special case of my ``proposal'' is a generalization of what syslog
does, your efficiency argument is silly.
> 2. It eliminates one channel of communication between the program and the
> outside world. Currently, daemons have stdout, stderr, and syslog(). You
> propose to reduce them to stdout and stderr.
Yes. Daemons don't use stderr anyway. (See below for further discussion.)
> 3. Under your scheme, every time I start up a process that I want to log
> messages, I have to pipe its stderr though this logging process of yours.
Ever heard of shell scripts? And see A.
> 4. There are some programs that run interactively that need to be able to
> both output errors to stderr to the users and to log messages in the system
> logs. For example, su. How would su print error messages if it couldn't
> use stderr because it was piped through an error logging program.
The reason that such programs *need* two error streams is security. su
should be logging directly to a file, not to a separate daemon that's
easy to clog with spurious messages. See A.
> 5. To generalize (3) and (4) above, the syslog() mechanism is controlled by
> the system. Stdin, stdout and stderr are controlled by the user. There
> has to be a way for programs to log things in a way that is guaranteed to
> get them logged (as long as the syslogd is running, of course, and it
> should be running all the time), no matter where stderr points.
That's really dumb. ``stdin and stdout are controlled by the user. Hence
programs must not read input or produce output.'' Obviously when there's
a security issue the program should be writing directly to files. In
other cases, the user is supposed to be in control. Also see A.
---Dan
More information about the Comp.unix.wizards
mailing list