Debianでは、rsyslogはデフォルトでrootとして実行されます(POSIX互換性のため)。開始後に特権を削除できますが、よりクリーンな方法は、非特権ユーザーとして開始することです。非特権ユーザーとして実行するようにrsyslogを設定するクリーンな方法は何でしょうか? (どのユーザー?)。グーグル中に、start-stop-daemonを見つけました。これにより、デーモンが非ルートとして起動する可能性があります。これはそれを行う方法ですか、それともより良い方法がありますか?
4.1.1以降、rsyslogd
は、起動後に別のユーザーやグループになりすますことで特権を削除する機能を提供します。
POSIX
標準により、1024
より下のネットワークポートにバインドする必要があるリスナーがある場合、rsyslogd
は常にrootとして起動する必要があることに注意してください。たとえば、UDPリスナーは通常514
をリッスンする必要があるため、rsyslogd
はrootとして起動する必要があります。
この機能が必要ない場合は、通常のユーザーとしてrsyslog
を直接起動できます。それがおそらく最も安全な操作方法です。ただし、rootとしての起動が必要な場合は、$PrivDropToGroup
および$PrivDropToUser
configディレクティブを使用して、初期化後にrsyslogd
がドロップするグループやユーザーを指定できます。これが発生すると、デーモンは高い権限なしで実行されます(もちろん、指定したユーザーアカウントの権限によって異なります)。
これはすべて rsyslog wiki からのもので、もう利用できませんが、まだ アーカイブ にあります
あなたはそれを読むべきです。
開発マシンからリモートsyslogデータを受信するために非特権ユーザーとしてrsyslogを実行しようとしたときに、この質問を見つけました。他の人が同様のユースケースを持っていると仮定すると、ここで私が見つけたものは次のとおりです。
Ubuntu14.04でテスト済み。
多くの典型的なrsyslog機能にはルートが必要ですが、すべてではありません。このような機能が必要な場合、通常、rsyslogは独自のログ内で文句を言います。
例は次のとおりです。
imuxsock
-ローカルsyslogロギング(/ dev/logを開くことができません)-permissiosnでこれを回避できます-私はそれを必要としませんでしたimklog
-カーネルロギング-明らかにルートが必要$FileOwner
-つまりchmod-明らかにルートが必要$ProveDropToUser/Group
それとは別に、ネットワークモジュールは、非特権ポートを使用している限り、正常に機能します。さらに、ロギング/スプーリングディレクトリにアクセスできる必要があります。注目すべきは、rsyslog.confが絶対パスを使用しているように見えることです。
rsyslog.confは以下のとおりです-ホストごとのロギング用にさらに微調整しますが、それは範囲を超えています:
#################
#### MODULES ####
#################
$ModLoad immark # provides --MARK-- message capability
# NOTE - listen on unprivileged port 2514
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 2514
# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 2514
###########################
#### GLOBAL DIRECTIVES ####
###########################
#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Filter duplicated messages
$RepeatedMsgReduction on
#
# Set the default permissions for all log files.
#
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
# These may require root
#$FileOwner syslog
#$FileGroup adm
#$PrivDropToUser syslog
#$PrivDropToGroup syslog
#
# Where to place spool and state files
#
$WorkDirectory /home/user/rsyslog/spool
#
# Include all config files in /etc/rsyslog.d/
#
#$IncludeConfig /etc/rsyslog.d/*.conf
# Default rules for rsyslog.
#
# For more information see rsyslog.conf(5) and /etc/rsyslog.conf
#
# First some standard log files. Log by facility.
#
auth,authpriv.* /home/user/rsyslog/log/auth.log
*.*;auth,authpriv.none -/home/user/rsyslog/log/syslog
cron.* /home/user/rsyslog/log/cron.log
daemon.* -/home/user/rsyslog/log/daemon.log
kern.* -/home/user/rsyslog/log/kern.log
user.* -/home/user/rsyslog/log/user.log
#
# Some "catch-all" log files.
#
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/home/user/rsyslog/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/home/user/rsyslog/log/messages
デーモンを起動するには、カスタム構成を指定し、別のpidファイルを指定して、デーモンをシステムrsyslogから分離しておく(そして書き込みアクセス権があることを確認する)だけです。
$ rsyslogd -f rsyslog.conf -i ~/rsyslog/pid
その実行を確認します。
$ ps ux
user 24374 0.0 0.0 347632 1520 ? Ssl 10:18 0:00 rsyslogd -f rsyslog.conf -i /home/user/rsyslog/pid
$ tail ~/rsyslog/log/syslog
May 19 10:44:18 plutonium rsyslogd: [Origin software="rsyslogd" swVersion="7.4.4" x-pid="26504" x-info="http://www.rsyslog.com"] start
私のシステム(Debian)では、rsyslogは/etc/init.d/rsyslogによって開始されます。これには次のようなものが含まれています。
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
start-stop-daemonのマニュアルによると、「-chuid」オプションを指定できます。これにより、プロセスが別のユーザーとして開始されます。
start-stop-daemon --start --chuid daemon --user daemon --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
したがって、残っている唯一の問題は、何が良い習慣になるかということです。どのユーザーを使用する必要がありますか?このユーザーは私の/ var/log /への書き込みアクセス権を持ちます