summaryrefslogtreecommitdiffstats
path: root/rsyslogd.8
blob: 3a214b807c2e9ff01a20afd5d2d55cb98eea5675 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
.\" Copyright 2004-2005 Rainer Gerhards and Adiscon for the rsyslog modifications
.\" May be distributed under the GNU General Public License
.\"
.TH RSYSLOGD 8 "01 February 2007" "Version 1.13.1 (unstable)" "Linux System Administration"
.SH NAME
rsyslogd \- reliable and extended syslogd 
.SH SYNOPSIS
.B rsyslogd
.RB [ " \-a "
.I socket
]
.RB [ " \-d " ]
.RB [ " \-e " ]
.RB [ " \-f "
.I config file
]
.RB [ " \-h " ] 
.RB [ " \-i "
.I pid file
]
.RB [ " \-l "
.I hostlist
]
.RB [ " \-m "
.I interval
] 
.RB [ " \-n " ]
.RB [ " \-o " ]
.RB [ " \-p"
.IB socket 
]
.br
.RB [ " \-r "
.I port
]
.RB [ " \-s "
.I domainlist
]
.RB [ " \-t "
.I port
]
.RB [ " \-v " ]
.RB [ " \-w " ]
.LP
.SH DESCRIPTION
.B Rsyslogd
is a system utility providing support for message logging.
Support of both internet and
unix domain sockets enables this utility to support both local
and remote logging (via UDP and TCP).

.BR Rsyslogd (8)
is derived from the sysklogd package which in turn is derived from the
stock BSD sources.

.B Rsyslogd
provides a kind of logging that many modern programs use.  Every logged
message contains at least a time and a hostname field, normally a
program name field, too, but that depends on how trusty the logging
program is. The rsyslog package supports free definition of output formats
via templates. It also supports precise timestamps and writing directly
to MySQL databases. If the database option is used, tools like phpLogCon can
be used to view the log data.

While the
.B rsyslogd
sources have been heavily modified a couple of notes
are in order.  First of all there has been a systematic attempt to
insure that rsyslogd follows its default, standard BSD behavior. Of course,
some configuration file changes are necessary in order to support the
template system. However, rsyslogd should be able to use a standard
syslog.conf and act like the orginal syslogd. However, an original syslogd
will not work correctly with a rsyslog-enhanced configuration file. At
best, it will generate funny looking file names.
The second important concept to note is that this version of rsyslogd
interacts transparently with the version of syslog found in the
standard libraries.  If a binary linked to the standard shared
libraries fails to function correctly we would like an example of the
anomalous behavior.

The main configuration file
.I /etc/rsyslog.conf
or an alternative file, given with the 
.B "\-f"
option, is read at startup.  Any lines that begin with the hash mark
(``#'') and empty lines are ignored.  If an error occurs during parsing
the error element is ignored. It is tried to parse the rest of the line.

For details and configuration examples, see the
.B rsyslog.conf (5)
man page.

.LP
.SH OPTIONS
.TP
.BI "\-a " "socket"
Using this argument you can specify additional sockets from that
.B rsyslogd
has to listen to.  This is needed if you're going to let some daemon
run within a chroot() environment.  You can use up to 19 additional
sockets.  If your environment needs even more, you have to increase
the symbol
.B MAXFUNIX
within the syslogd.c source file.  An example for a chroot() daemon is
described by the people from OpenBSD at
http://www.psionic.com/papers/dns.html.
.TP
.B "\-d"
Turns on debug mode.  Using this the daemon will not proceed a 
.BR fork (2)
to set itself in the background, but opposite to that stay in the
foreground and write much debug information on the current tty.  See the
DEBUGGING section for more information.
.TP
.B "\-e"
Turns on delivery of every message (e like "every"). Without this
option, rsyslog tries to suppress what seems to be duplicate messages.
This is done by stock syslogd and rsyslogd mimics this behaviour for
best compatibility. In many cases, however, one would like to see all
messages on remote hosts. In this case, turn on the -e option.
.TP
.BI "\-f " "config file"
Specify an alternative configuration file instead of
.IR /etc/rsyslog.conf ","
which is the default.
.TP
.BI "\-h "
By default rsyslogd will not forward messages it receives from remote hosts.
Specifying this switch on the command line will cause the log daemon to
forward any remote messages it receives to forwarding hosts which have been
defined.
.TP
.BI "\-i " "pid file"
Specify an alternative pid file instead of the default one.
This option must be used if multiple instances of rsyslogd should
run on a single machine.
.TP
.BI "\-l " "hostlist"
Specify a hostname that should be logged only with its simple hostname
and not the fqdn.  Multiple hosts may be specified using the colon
(``:'') separator.

Note: At the moment, this option is only available for command
line comptability. It has, however, NO effect and is ignored.
.TP
.BI "\-m " "interval"
The
.B rsyslogd
logs a mark timestamp regularly.  The default
.I interval
between two \fI-- MARK --\fR lines is 20 minutes.  This can be changed
with this option.  Setting the
.I interval
to zero turns it off entirely.

Note: At the moment, this option is only available for command
line comptability. It has, however, NO effect and is ignored.
.TP
.B "\-n"
Avoid auto-backgrounding.  This is needed especially if the
.B rsyslogd
is started and controlled by
.BR init (8).
.TP
.B "\-o"
Omit reading the standard local log socket. This option is most
useful for running multiple instances of rsyslogd on a single 
machine. When specified, no local log socket is opened at all.
.TP
.BI "\-p " "socket"
You can specify an alternative unix domain socket instead of
.IR /dev/log "."
.TP
.BI "\-r " "port"
Activates the syslog/udp listener service. The listener
will listen to the specified port. Please note that a 
port must be specified in any case. This is different from
the stock sysklogd package. If you would like to use
the system's default port, specify 0 as the port number. That
will result in an /etc/services lookup for the actual port
number. If the "-r" option is not given, no syslog/udp listner
is available.
.TP
.BI "\-s " "domainlist"
Specify a domainname that should be stripped off before
logging.  Multiple domains may be specified using the colon (``:'')
separator.
Please be advised that no sub-domains may be specified but only entire
domains.  For example if
.B "\-s north.de"
is specified and the host logging resolves to satu.infodrom.north.de
no domain would be cut, you will have to specify two domains like:
.BR "\-s north.de:infodrom.north.de" .
.TP
.BI "\-t " "port"
Activates the syslog/tcp listener service. The listener will listen to
the specified port. Please note that syslog/tcp is not standardized,
but the implementation in rsyslogd follows common practice and is
compatible with e.G. Cisco PIX, syslog-ng and MonitorWare (Windows).
.TP
.B "\-v"
Print version and exit.
.TP
.B "\-w"
Supress warnings issued when messages are received from non-authorized
machines (those, that are in no AllowedSender list).
.LP
.SH SIGNALS
.B Rsyslogd
reacts to a set of signals.  You may easily send a signal to
.B rsyslogd
using the following:
.IP
.nf
kill -SIGNAL `cat /var/run/rsyslogd.pid`
.fi
.PP
.TP
.B SIGHUP
This lets
.B rsyslogd
perform a re-initialization.  All open files are closed, the
configuration file (default is 
.IR /etc/rsyslog.conf ")"
will be reread and the
.BR rsyslog (3)
facility is started again.
.TP
.B SIGTERM
.B Rsyslogd
will die.
.TP
.BR SIGINT ", " SIGQUIT
If debugging is enabled these are ignored, otherwise 
.B rsyslogd
will die.
.TP
.B SIGUSR1
Switch debugging on/off.  This option can only be used if
.B rsyslogd
is started with the
.B "\-d"
debug option.
.TP
.B SIGCHLD
Wait for childs if some were born, because of wall'ing messages.
.LP
.SH SUPPORT FOR REMOTE LOGGING
.B Rsyslogd
provides network support to the syslogd facility.
Network support means that messages can be forwarded from one node
running rsyslogd to another node running rsyslogd (or a
compatible syslog implementation) where they will be
actually logged to a disk file.

To enable this you have to specify either the
.B "\-r"
or
.B "\-t"
option on the command line.  The default behavior is that
.B rsyslogd
won't listen to the network. You can also combine these two
options if you want rsyslogd to listen to both TCP and UDP
messages.

The strategy is to have rsyslogd listen on a unix domain socket for
locally generated log messages.  This behavior will allow rsyslogd to
inter-operate with the syslog found in the standard C library.  At the
same time rsyslogd listens on the standard syslog port for messages
forwarded from other hosts.  To have this work correctly the
.BR services (5)
files (typically found in
.IR /etc )
must have the following
entry:
.IP
.nf
	syslog          514/udp
.fi
.PP
If this entry is missing
.B rsyslogd
will use the well known port of 514 (so in most cases, it's not
really needed).

To cause messages to be forwarded to another host replace
the normal file line in the
.I rsyslog.conf
file with the name of the host to which the messages is to be sent
prepended with an @ (for UDP delivery) or the sequence @@ (for
TCP delivery). The host name can also be followed by a colon and
a port number, in which case the message is sent to the specified
port on the remote host.
.IP
For example, to forward
.B ALL
messages to a remote host use the
following
.I rsyslog.conf
entry:
.IP
.nf
	# Sample rsyslogd configuration file to
	# messages to a remote host forward all.
	*.*			@hostname
.fi
More samples can be found in sample.conf.

If the remote hostname cannot be resolved at startup, because the
name-server might not be accessible (it may be started after rsyslogd)
you don't have to worry.
.B Rsyslogd
will retry to resolve the name ten times and then complain.  Another
possibility to avoid this is to place the hostname in
.IR /etc/hosts .

With normal
.BR syslogd s
you would get syslog-loops if you send out messages that were received
from a remote host to the same host (or more complicated to a third
host that sends it back to the first one, and so on).

To avoid this no messages that were received from a
remote host are sent out to another (or the same) remote host. You can
disable this feature by the
.B \-h
option.

If the remote host is located in the same domain as the host, 
.B rsyslogd
is running on, only the simple hostname will be logged instead of
the whole fqdn.

In a local network you may provide a central log server to have all
the important information kept on one machine.  If the network consists
of different domains you don't have to complain about logging fully
qualified names instead of simple hostnames.  You may want to use the
strip-domain feature
.B \-s
of this server.  You can tell
.B rsyslogd
to strip off several domains other than the one the server is located
in and only log simple hostnames.

Using the
.B \-l
option there's also a possibility to define single hosts as local
machines.  This, too, results in logging only their simple hostnames
and not the fqdns.

.SH OUTPUT TO DATABASES
.B Rsyslogd
has support for writing data to MySQL database tables. The exact specifics
are described in the
.B rsyslog.conf (5)
man page. Be sure to read it if you plan to use database logging.

While it is often handy to have the data in a database, you must be aware
of the implications. Most importantly, database logging takes far
longer than logging to a text file. A system that can handle a large
log volume when writing to text files can most likely not handle
a similar large volume when writing to a database table.

.SH OUTPUT TO NAMED PIPES (FIFOs)
.B Rsyslogd
has support for logging output to named pipes
(fifos).  A fifo or named pipe can be used as a destination for log
messages by prepending a pipy symbol (``|'') to the name of the
file.  This is handy for debugging.  Note that the fifo must be created
with the mkfifo command before
.B rsyslogd
is started.
.IP
The following configuration file routes debug messages from the
kernel to a fifo:
.IP
.nf
	# Sample configuration to route kernel debugging
	# messages ONLY to /usr/adm/debug which is a
	# named pipe.
	kern.=debug			|/usr/adm/debug
.fi
.LP
.SH INSTALLATION CONCERNS
There is probably one important consideration when installing
rsyslogd.  It is dependent on proper
formatting of messages by the syslog function.  The functioning of the
syslog function in the shared libraries changed somewhere in the
region of libc.so.4.[2-4].n.  The specific change was to
null-terminate the message before transmitting it to the 
.I /dev/log
socket.  Proper functioning of this version of rsyslogd is dependent on
null-termination of the message.

This problem will typically manifest itself if old statically linked
binaries are being used on the system.  Binaries using old versions of
the syslog function will cause empty lines to be logged followed by
the message with the first character in the message removed.
Relinking these binaries to newer versions of the shared libraries
will correct this problem.

The
.BR rsyslogd (8)
can be run from
.BR init (8)
or started as part of the rc.*
sequence.  If it is started from init the option \fI\-n\fR must be set,
otherwise you'll get tons of syslog daemons started.  This is because 
.BR init (8)
depends on the process ID.
.LP
.SH SECURITY THREATS
There is the potential for the rsyslogd daemon to be
used as a conduit for a denial of service attack.
A rogue program(mer) could very easily flood the rsyslogd daemon with
syslog messages resulting in the log files consuming all the remaining
space on the filesystem.  Activating logging over the inet domain
sockets will of course expose a system to risks outside of programs or
individuals on the local machine.

There are a number of methods of protecting a machine:
.IP 1.
Implement kernel firewalling to limit which hosts or networks have
access to the 514/UDP socket.
.IP 2.
Logging can be directed to an isolated or non-root filesystem which,
if filled, will not impair the machine.
.IP 3.
The ext2 filesystem can be used which can be configured to limit a
certain percentage of a filesystem to usage by root only.  \fBNOTE\fP
that this will require rsyslogd to be run as a non-root process.
\fBALSO NOTE\fP that this will prevent usage of remote logging since
rsyslogd will be unable to bind to the 514/UDP socket.
.IP 4.
Disabling inet domain sockets will limit risk to the local machine.
.IP 5.
Use step 4 and if the problem persists and is not secondary to a rogue
program/daemon get a 3.5 ft (approx. 1 meter) length of sucker rod*
and have a chat with the user in question.

Sucker rod def. \(em 3/4, 7/8 or 1in. hardened steel rod, male
threaded on each end.  Primary use in the oil industry in Western
North Dakota and other locations to pump 'suck' oil from oil wells.
Secondary uses are for the construction of cattle feed lots and for
dealing with the occasional recalcitrant or belligerent individual.
.SS Message replay and spoofing
If remote logging is enabled, messages can easily be spoofed and replayed.
As the messages are transmitted in clear-text, an attacker might use
the information obtained from the packets for malicious things. Also, an
attacker might reply recorded messages or spoof a sender's IP address,
which could lead to a wrong preception of system activity. Be sure to think
about syslog network security before enabling it.
.LP
.SH DEBUGGING
When debugging is turned on using
.B "\-d"
option then
.B rsyslogd
will be very verbose by writing much of what it does on stdout.  Whenever
the configuration file is reread and re-parsed you'll see a tabular,
corresponding to the internal data structure.  This tabular consists of
four fields:
.TP
.I number
This field contains a serial number starting by zero.  This number
represents the position in the internal data structure (i.e. the
array).  If one number is left out then there might be an error in the
corresponding line in
.IR /etc/rsyslog.conf .
.TP
.I pattern
This field is tricky and represents the internal structure
exactly.  Every column stands for a facility (refer to
.BR syslog (3)).
As you can see, there are still some facilities left free for former
use, only the left most are used.  Every field in a column represents
the priorities (refer to
.BR syslog (3)).
.TP
.I action
This field describes the particular action that takes place whenever a
message is received that matches the pattern.  Refer to the
.BR syslog.conf (5)
manpage for all possible actions.
.TP
.I arguments
This field shows additional arguments to the actions in the last
field.  For file-logging this is the filename for the logfile; for
user-logging this is a list of users; for remote logging this is the
hostname of the machine to log to; for console-logging this is the
used console; for tty-logging this is the specified tty; wall has no
additional arguments.
.TP
.SS templates
There will also be a second internal structure which lists all
defined templates and there contents. This also enables you to see
the internally-defined, hardcoded templates.
.SH FILES
.PD 0
.TP
.I /etc/rsyslog.conf
Configuration file for
.BR rsyslogd .
See
.BR rsyslog.conf (5)
for exact information.
.TP
.I /dev/log
The Unix domain socket to from where local syslog messages are read.
.TP
.I /var/run/rsyslogd.pid
The file containing the process id of 
.BR rsyslogd .
.PD
.SH BUGS
This is an early release of
.B Rsyslogd .
As such, there are probably a number of bugs. Those that I know
are described in the file BUGS that came with the package. Be sure
to review it.

If an error occurs in one line the whole rule is ignored.

.B Rsyslogd
doesn't change the filemode of opened logfiles at any stage of
process.  If a file is created it is world readable.  If you want to
avoid this, you have to create it and change permissions on your own.
This could be done in combination with rotating logfiles using the 
.BR savelog (8)
program that is shipped in the 
.B smail
3.x distribution.  Remember that it might be a security hole if
everybody is able to read auth.* messages as these might contain
passwords.
.LP
.SH SEE ALSO
.BR rsyslog.conf (5),
.BR logger (1),
.BR syslog (2),
.BR syslog (3),
.BR services (5),
.BR savelog (8)
.LP
.SH COLLABORATORS
.B rsyslogd
is derived from sysklogd sources, which in turn was taken from
the BSD sources. Special thanks to Greg Wettstein (greg@wind.enjellic.com)
and Martin Schulze (joey@linux.de) for the fine sysklogd package.

.PD 0
.TP
Rainer Gerhards
.TP
Adiscon GmbH
.TP
Grossrinderfeld, Germany
.TP
rgerhards@adiscon.com

.TP
Michael Meckelein
.TP
Adiscon GmbH
.TP
mmeckelein@adiscon.com
.PD
.zZ