RedHat Linux でリモートからの syslog を受け付ける




RedHat Linux でリモートからの syslog を受け付けるようにする方法は次の通り。

デフォルトではローカルからの syslog しか受け付けないようになっている。

これを syslogd の起動オプションを変更して、
リモートからの syslog を受け付けるようなオプションで起動させる。

具体的には 「r」 オプションを付けて起動させる。

まずはデフォルトで syslogd がどのようなオプションで起動しているかを確認してみる。

# ps -ef | grep syslog
root      1581     1  0 Aug06 ?        00:00:00 syslogd -m 0
# 

今は 「-m 0」 というオプションで起動していることが分かる。

次にデフォルトの syslogd の起動スクリプトを確認してみる。

# cat /etc/init.d/syslog 
#!/bin/bash
#
# syslog        Starts syslogd/klogd.
#
#
# chkconfig: 2345 12 88
# description: Syslog is the facility by which many daemons use to log \
# messages to various system log files.  It is a good idea to always \
# run syslog.
### BEGIN INIT INFO
# Provides: $syslog
### END INIT INFO

# Source function library.
. /etc/init.d/functions

[ -f /sbin/syslogd ] || exit 0
[ -f /sbin/klogd ] || exit 0

# Source config
if [ -f /etc/sysconfig/syslog ] ; then
        . /etc/sysconfig/syslog
else
        SYSLOGD_OPTIONS="-m 0"
        KLOGD_OPTIONS="-2"
fi

RETVAL=0

if [ -z "$SYSLOG_UMASK" ] ; then
      SYSLOG_UMASK=077;
fi
umask $SYSLOG_UMASK

start() {
        echo -n $"Starting system logger: "
        daemon syslogd $SYSLOGD_OPTIONS
        RETVAL=$?
        echo
        echo -n $"Starting kernel logger: "
        daemon klogd $KLOGD_OPTIONS
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/syslog
        return $RETVAL
}
stop() {
        echo -n $"Shutting down kernel logger: "
        killproc klogd
        echo
        echo -n $"Shutting down system logger: "
        killproc syslogd
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/syslog
        return $RETVAL
}
rhstatus() {
        status syslogd
        status klogd
}
restart() {
        stop
        start
}
reload()  {
    RETVAL=1
    syslog=`cat /var/run/syslogd.pid 2>/dev/null`
    echo -n "Reloading syslogd..."
    if [ -n ${syslog} ] && [ -e /proc/${syslog} ]; then
        kill -HUP $syslog;
        RETVAL=$?
    fi
    if [ $RETVAL -ne 0 ]; then
        fail
    else
        success
    fi
    echo
    RETVAL=1
    echo -n "Reloading klogd..."
    klog=`cat /var/run/klogd.pid 2>/dev/null`
    if [ -n ${klog} ] && [ -e /proc/${klog} ]; then
        kill -USR2 $klog;
        RETVAL=$?
    fi
    if [ $RETVAL -ne 0 ]; then
        fail
    else
        success
    fi
    echo    
    return $RETVAL
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        rhstatus
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  condrestart)
        [ -f /var/lock/subsys/syslog ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart}"
        exit 1
esac

exit $?

起動スクリプトの黄色文字部分で
SYSLOGD_OPTIONS として 「-m 0」 オプションを指定しているようだ。

そこを見ると /etc/sysconfig/syslog があれば、
それを読み込むようになっているので確認してみる。

# cat /etc/sysconfig/syslog 
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
#    once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
#
SYSLOG_UMASK=077
# set this to a umask value to use for all log files as in umask(1).
# By default, all permissions are removed for "group" and "other".

やはり黄色文字部分で SYSLOGD_OPTIONS を指定している。

ここで、この部分を編集して SYSLOGD_OPTIONS="-r -m 0" に変更する。

編集したら syslogd を再起動してオプションを確認してみる。

# /etc/init.d/syslog restart
カーネルロガーを停止中:                                    [  OK  ]
システムロガーを停止中:                                    [  OK  ]
システムロガーを起動中:                                    [  OK  ]
カーネルロガーを起動中:                                    [  OK  ]
# 
# ps -ef | grep syslog
root      7064     1  0 15:48 ?        00:00:00 syslogd -r -m 0
#

「r」 オプション付きで syslogd が起動している。

これでリモートからの syslog を受け付けるようになりました。