Debian에서 rsyslog는 기본적으로 POSIX 호환성으로 인해 루트로 실행됩니다. 부팅 후 권한을 제거할 수 있지만 더 깔끔한 접근 방식은 권한이 없는 사용자로 부팅하는 것입니다. 권한 없는 사용자로 실행되도록 rsyslog를 설정하는 깔끔한 방법은 무엇입니까? (어떤 사용자?). 인터넷 검색 중에 데몬을 루트가 아닌 사용자로 시작하게 만드는 start-stop-daemon을 발견했습니다. 이 방법인가요, 아니면 더 좋은 방법이 있나요?
답변1
4.1.1부터 rsyslogd
시작 후 다른 사용자 및/또는 그룹을 가장하여 권한을 제거하는 기능이 제공됩니다.
POSIX
표준 에 따르면 rsyslogd
아래 네트워크 포트에 바인딩해야 하는 리스너가 있는 경우 항상 루트로 시작해야 합니다 1024
. 예를 들어, UDP 수신기는 일반적으로 수신 대기해야 514
하므로 rsyslogd
루트로 시작해야 합니다.
이 기능이 필요하지 않은 경우 rsyslog
일반 사용자로 직접 시작할 수 있습니다. 이것이 아마도 가장 안전한 작동 방법일 것입니다. 그러나 루트로 시작해야 하는 경우 및 config 지시문을 사용하여 $PrivDropToGroup
초기화 후에 삭제해야 하는 $PrivDropToUser
그룹 및/또는 사용자를 지정할 수 있습니다. rsyslogd
이런 일이 발생하면 데몬은 상승된 권한 없이 실행됩니다(물론 이는 지정한 사용자 계정의 권한에 따라 달라집니다).
이 모든 것은 다음에서 비롯됩니다.rsyslog 위키, 더 이상 사용할 수 없지만 계속 사용할 수 있습니다.아카이브
당신은 그것을 읽어야합니다.
답변2
개발 시스템에서 원격 syslog 데이터를 수신하기 위해 권한 없는 사용자로 rsyslog를 실행하려고 시도하는 동안 이 문제를 발견했습니다. 다른 사람들도 비슷한 사용 사례를 가지고 있다고 가정하고 제가 찾은 내용은 다음과 같습니다.
우분투 14.04에서 테스트되었습니다.
많은 일반적인 rsyslog 기능에는 루트가 필요하지만 전부는 아닙니다. 일반적으로 rsyslog는 해당 기능이 필요한 경우 자체 로그에 불만을 표시합니다.
예는 다음과 같습니다:
imuxsock
- 로컬 시스템 로깅(/dev/log를 열 수 없음) - 권한을 사용하여 이 문제를 해결할 수 있습니다. - 필요하지 않습니다.imklog
- 커널 로깅 - 당연히 루트가 필요합니다.$FileOwner
- 즉, chmod - 당연히 루트가 필요합니다.$ProveDropToUser/Group
- 액세스 콘솔, 브로드캐스트 메시지 - xconsole 등과 같은...
그 외에 네트워크 모듈은 권한이 없는 포트를 사용하는 한 제대로 작동합니다. 또한 로깅/스풀 디렉터리에 액세스할 수 있어야 합니다. 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
데몬을 시작하려면 사용자 정의 구성을 가리키고 시스템 rsyslog와 별도로 유지하기 위해 다른 pid 파일을 지정해야 합니다(그리고 쓰기 권한이 있는지 확인).
$ 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
답변3
내 시스템(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/에 대한 쓰기 액세스 권한을 갖습니다.
답변4
당신은 그것을 사용할 수 있습니다능력실행 파일에 대한 특정 권한 상승
setcap 'cap_dac_override,cap_chown,cap_syslog+epi' /usr/sbin/rsyslogd
이렇게 하면 일반 사용자로서 필요한 기능을 실행할 수 있습니다. 실행 파일에 이러한 권한을 할당하려면 관리자 권한이 필요합니다.
업데이트: 포트를 열기 전에 애플리케이션이 기능을 요청하지 않으면 작동하지 않습니다.