В течение двух дней я пытался заставить RSysLog предупреждать всех [или определенных] пользователей об определенных объектах / приоритетах, попадающих в RSysLog.
rsyslog.d / 50-default.conf:
...
*.emerg :omusrmsg:*
...
команда
# logger -p emerg "Test Broadcast"
не отправляет сообщения ни одному зарегистрированному пользователю, но создает запись в / var / log / syslog. Я пробовал это на стандартной капле Digital Ocean 14LTS, затем я установил syslog-ng, и там он работал нормально. Если ничего не помогает, мне придется переключиться на syslog-ng.
Я попытался отладить его, но не нашел ничего убедительного, просто он должен вызывать свой внутренний плагин omusrmsg.
6570.499968822:imuxsock.c : --------imuxsock calling select, active file descriptors (max 4):
0 4
6570.500000498:main Q:Reg/w0 : wti 0x1e55a80: worker awoke from idle processing
6570.500011205:main Q:Reg/w0 : DeleteProcessedBatch: we deleted 0 objects and enqueued 0 objects
6570.500018262:main Q:Reg/w0 : doDeleteBatch: delete batch from store, new sizes: log 1, phys 1
6570.500028026:main Q:Reg/w0 : processBATCH: batch of 1 elements must be processed
6570.500035307:main Q:Reg/w0 : processBATCH: next msg 0: <8>Mar 18 11:02:50 root: Test Broadcast
6570.500043692:main Q:Reg/w0 : PRIFILT 'auth,authpriv.*'
6570.500060156:main Q:Reg/w0 : pmask: X X X X FF X X X X X FF X X X X X X X
X X X X X X X X
6570.500212848:main Q:Reg/w0 : PRIFILT condition result is 0
6570.500219084:main Q:Reg/w0 : PRIFILT '*.*;auth,authpriv.none'
6570.500234875:main Q:Reg/w0 : pmask: FF FF FF FF X FF FF FF FF FF X FF FF FF FF FF FF FF F
F FF FF FF FF FF FF FF
6570.500376739:main Q:Reg/w0 : PRIFILT condition result is 1
6570.500383229:main Q:Reg/w0 : ACTION 1 [builtin:omfile:/var/log/syslog]
6570.500399749:main Q:Reg/w0 : executing action 1
6570.500406423:main Q:Reg/w0 : Called action, logging to builtin:omfile
6570.500434197:main Q:Reg/w0 : action 1 is transactional - executing in commit phase
6570.500442730:main Q:Reg/w0 : Action 1 transitioned to state: itx
6570.500449556:main Q:Reg/w0 : PRIFILT 'syslog.*'
6570.500464841:main Q:Reg/w0 : pmask: X X X X X FF X X X X X X X X X X X X
X X X X X X X X
6570.500600153:main Q:Reg/w0 : PRIFILT condition result is 0
6570.500606337:main Q:Reg/w0 : PRIFILT 'kern.*'
6570.500621174:main Q:Reg/w0 : pmask: FF X X X X X X X X X X X X X X X X X
X X X X X X X X
6570.500756319:main Q:Reg/w0 : PRIFILT condition result is 0
6570.500762583:main Q:Reg/w0 : PRIFILT 'mail.*'
6570.500779355:main Q:Reg/w0 : pmask: X X FF X X X X X X X X X X X X X X X
X X X X X X X X
6570.500917348:main Q:Reg/w0 : PRIFILT condition result is 0
6570.500922727:main Q:Reg/w0 : PRIFILT 'mail.err'
6570.500936390:main Q:Reg/w0 : pmask: X X F X X X X X X X X X X X X X X X
X X X X X X X X
6570.501051126:main Q:Reg/w0 : PRIFILT condition result is 0
6570.501056236:main Q:Reg/w0 : PRIFILT 'news.crit'
6570.501069057:main Q:Reg/w0 : pmask: X X X X X X X 7 X X X X X X X X X X
X X X X X X X X
6570.501190023:main Q:Reg/w0 : PRIFILT condition result is 0
6570.501195270:main Q:Reg/w0 : PRIFILT 'news.err'
6570.501208511:main Q:Reg/w0 : pmask: X X X X X X X F X X X X X X X X X X
X X X X X X X X
6570.501322879:main Q:Reg/w0 : PRIFILT condition result is 0
6570.501328029:main Q:Reg/w0 : PRIFILT 'news.notice'
6570.501341145:main Q:Reg/w0 : pmask: X X X X X X X 3F X X X X X X X X X X
X X X X X X X X
6570.501456323:main Q:Reg/w0 : PRIFILT condition result is 0
6570.501461494:main Q:Reg/w0 : PRIFILT '*.emerg'
6570.501474573:main Q:Reg/w0 : pmask: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
6570.501596778:main Q:Reg/w0 : PRIFILT condition result is 1
6570.501602014:main Q:Reg/w0 : ACTION 9 [builtin:omusrmsg::omusrmsg:*]
6570.501616285:main Q:Reg/w0 : executing action 9
6570.501621661:main Q:Reg/w0 : Called action, logging to builtin:omusrmsg
6570.501638200:main Q:Reg/w0 : wti 0x1e55a80: we need to create a new action worker instance for
action 9
6570.501647455:main Q:Reg/w0 : Action 9 transitioned to state: itx
6570.501653556:main Q:Reg/w0 : entering actionCalldoAction(), state: itx, actionNbr 9
6570.501658963:main Q:Reg/w0 :
6570.501794730:main Q:Reg/w0 : Action 9 transitioned to state: rdy
6570.501804424:main Q:Reg/w0 : END batch execution phase, entering to commit phase
6570.501811294:main Q:Reg/w0 : actionCommitAll: action 1, state 1, nbr to commit 0 isTransactiona
l 1
6570.501817299:main Q:Reg/w0 : doTransaction: have commitTransaction IF, using that, pWrkrInfo 0x
1e55bc0
6570.501823086:main Q:Reg/w0 : entering actionCallCommitTransaction(), state: itx, actionNbr 1, n
Msgs 1
6570.501830453:main Q:Reg/w0 : omfile: write to stream, pData->pStrm 0x7fdf78002500, lenBuf 45, s
trt data Mar 18 11:02:50 phoenix root: Test Broadcast
6570.501838364:main Q:Reg/w0 : strm 0x7fdf78002500: file 5(syslog) flush, buflen 45
6570.501845555:main Q:Reg/w0 : strmPhysWrite, stream 0x7fdf78002500, len 45
6570.501861894:main Q:Reg/w0 : strm 0x7fdf78002500: file 5 write wrote 45 bytes
6570.501868452:main Q:Reg/w0 : Action 1 transitioned to state: rdy
6570.501874835:main Q:Reg/w0 : Action 1 transitioned to state: itx
6570.501880751:main Q:Reg/w0 : Action 1 transitioned to state: rdy
6570.501886462:main Q:Reg/w0 : actionCommit, in retry loop, iRet 0
6570.501892786:main Q:Reg/w0 : actionCommitAll: action 2, state 0, nbr to commit 0 isTransactiona
l 1
6570.501899897:main Q:Reg/w0 : actionCommitAll: action 3, state 0, nbr to commit 0 isTransactiona
l 1
6570.501906392:main Q:Reg/w0 : actionCommitAll: action 9, state 0, nbr to commit 0 isTransactiona
l 0
6570.501912074:main Q:Reg/w0 : processBATCH: batch of 1 elements has been processed
6570.501918697:main Q:Reg/w0 : regular consumer finished, iret=0, szlog 0 sz phys 1
6570.501925448:main Q:Reg/w0 : DeleteProcessedBatch: we deleted 1 objects and enqueued 0 objects
6570.501931248:main Q:Reg/w0 : doDeleteBatch: delete batch from store, new sizes: log 0, phys 0
6570.501937522:main Q:Reg/w0 : regular consumer finished, iret=4, szlog 0 sz phys 0
6570.501943253:main Q:Reg/w0 : main Q:Reg/w0: worker IDLE, waiting for work.
root@phoenix:~#
Я попытался добавить системный журнал в группу tty:
sudo adduser syslog tty
и, кажется, работает после service rsyslog restart
и повторный вход.
И просто для удовольствия, трудная для чтения, но более общая версия:
adduser $(awk '/^\$PrivDropToUser/ {print $2}' /etc/rsyslog.conf) $(stat -c "%G" $(tty))
Ты используешь $PrivDropToGroup
или $PrivDropToGroupID
в файле конфигурации? Есть ли у этой группы доступ на запись к терминалам пользователей (по умолчанию это будет группа tty
)? Обратите внимание, что (на основе моего чтения http://www.rsyslog.com/doc/droppriv.html), если любой из них указан, любые вторичные группы отбрасываются.
Доступны ли терминалы пользователей для записи этой группе? Ваши пользователи работают mesg n
выключить это? Чтобы проверить это, попробуйте следующее ...
-bash-4.1$ tty
/dev/pts/0
-bash-4.1$ ls -l /dev/pts/0
crw--w----. 1 sph9 tty 136, 0 Mar 23 22:59 /dev/pts/0
Чтобы rsyslog мог писать на пользовательские терминалы, он должен быть запущен как root
(чего вы говорите, что хотите избежать) или работать с группой, у которой есть доступ на запись. Приведенный выше пример взят из машины CentOS, вы можете обнаружить, что некоторые другие дистрибутивы имеют больше открытых разрешений (ящик Arch Linux, на который я только что смотрел, имел доступ на запись для группы и других).
Итак, если каждый терминал доступен для записи только зарегистрированному пользователю и членам группы tty
и rsyslogd работает как пользователь syslog
группа syslog
он не сможет писать на терминалы. Вы можете (я думаю) проверить эту теорию, временно изменив группу на одном из ваших tty (заменив pts / 0 при необходимости) ...
chgrp rsyslog /dev/pts/0
Если это сработает, вы можете попробовать настроить rsyslog для работы как группа tty
(хотя это может сломать другие вещи, если вы полагаетесь на файлы журнала, принадлежащие определенной группе).
Обратите внимание, что все это основано на быстром чтении документации rsyslog и опыте того, как это работает в целом, а не на конкретном опыте работы с последними версиями rsyslog.
Правильно ли записываются сеансы входа пользователей в utmp? (т.е. появляются ли они в выводе w
?). Только что наткнулся https://bugs.launchpad.net/ubuntu/+source/rsyslog/+bug/1366261 что говорит о том, что возникла проблема с AppArmor, rsyslogd и utmp, но это была проблема с более ранней версией.