Необходимо быть более конкретными и сказать нам, какой дистрибутив/политику Вы выполняете, некоторые допускают "неограниченные" процессы, которые удовлетворили бы Ваши потребности (человек runcon), другие не делают - в этом случае необходимо было бы или маркировать резервный сценарий типом SELinux, который позволяет доступ для чтения ко всем файлам, ИЛИ создайте новое правило приложений для него (трудно).
Править: Я предполагаю, что Вы уже считали запись FAQ SELinux на резервном копировании: использовать star
Запуск с 4.1.1, rsyslogd
обеспечивает способность отбросить полномочия путем исполнения роли как другой пользователь и/или группа после запуска.
Обратите внимание на то, что из-за POSIX
стандарты, rsyslogd
всегда потребности запустить как корень, если существует слушатель, который должен связать с сетевым портом ниже 1024
. Например, слушатель UDP обычно должен слушать 514
и как таковой rsyslogd
потребности запустить как корень.
Если Вам не нужна эта функциональность, можно запустить rsyslog
непосредственно как обычный пользователь. Это - вероятно, самый безопасный способ операций. Однако, если запуск как корень требуется, можно использовать $PrivDropToGroup
и $PrivDropToUser
директивы конфигурации для определения группы и/или пользователя это rsyslogd
должен спасть после инициализации. После того как это произошло, выполнения демона без высоких полномочий (зависящий, конечно, на полномочиях учетной записи пользователя, которую Вы указали).
Все это от rsyslog Wiki, которая больше не доступна, но все еще на архиве
Необходимо считать его.
В моей системе (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/
Я нашел этот вопрос при попытке запустить rsyslog как непривилегированный пользователь для получения удаленных данных syslog с машины-разработчика. Предположим, что у других пользователей есть похожий сценарий использования, вот что я нашел:
Протестировано на Ubuntu 14.04.
Ряд типичных функций rsyslog требуют root, но не все. Если такие возможности требуются, то обычно rsyslog будет жаловаться внутри собственных журналов.
Примеры:
imuxsock
- локальная регистрация syslog (не может открыть /dev/log) - вы можете работать с permissiosn - мне она не нужнаimklog
- регистрация ядра - очевидно, нужен root$FileOwner
- т.е. chmod - очевидно, нужен root$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