LINUX.ORG.RU
решено ФорумAdmin

Sudoers

 


0

1

Что я делаю:

ввожу команду проверки NTP: sudo ntpdate -d NTP_name

Команда делает запись в syslog вида:

Feb 17 08:41:00 *** sudo: user_name_Vuasiya : TTY=unknown ; PWD=*** ; USER=root ; COMMAND=/usr/sbin/ntpdate -d IP***

Проблема: Эту команду я использую раз в минуту на 4-6 серверов NTP. В итоге в syslog попадает ОГРОМНАЯ куча спама.

Вопрос: я установил sudo 1.8.6p3, т.к. вычитал что в этой версии есть замечательные опции:

NOLOG_OUTPUT

Добавил в sudo:

sudo visudo
ADMIN ALL=(root) NOLOG_OUTPUT:NOPASSWD: /usr/sbin/ntpdate -d*

Но системе пофиг на NOLOG_OUTPUT, как и вообще на спецификации: LOG_INPUT, NOLOG_INPUT, LOG_OUTPUT, NOLOG_OUTPUT. спам в syslog не прекратился. Я сделал решение не удовлетворяющее меня с точки зрения безопасности:

Defaults:user_name_Vuasiya !syslog

Но тогда все что делает user_name_Vuasiya в sudo не пишется в syslog. А мне надо чтобы только одна команда не писалась. Кто знает решение?

Решение:

Cmnd_Alias SCRIPT =  /usr/sbin/ntpdate
Defaults!SCRIPT !syslog

User specification User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \ (':' Host_List '=' Cmnd_Spec_List)*

Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List

Cmnd_Spec ::= Runas_Spec? Tag_Spec* Cmnd

Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'

Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | 'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:')

***********************************

sudoers also supports logging a command's input and output streams. I/O logging is not on by default but can be enabled using the log_input and log_output Defaults flags as well as the LOG_INPUT and LOG_OUTPUT command tags.

***********************************

LOG_INPUT and NOLOG_INPUT

These tags override the value of the log_input option on a per-command basis. For more information, see the description of log_input in the SUDOERS OPTIONS section below.

LOG_OUTPUT and NOLOG_OUTPUT

These tags override the value of the log_output option on a per- command basis. For more information, see the description of log_output in the SUDOERS OPTIONS section below.

*************************************

log_input If set, sudo will run the command in a pseudo tty and log all user input. If the standard input is not connected to the user's tty, due to I/O redirection or because the command is part of a pipeline, that input is also captured and stored in a separate log file.

Input is logged to the directory specified by the iolog_dir option (/var/adm/sudo-io by default) using a unique session ID that is included in the normal sudo log line, prefixed with ``TSID=". The iolog_file option may be used to control the format of the session ID.

Note that user input may contain sensitive information such as passwords (even if they are not echoed to the screen), which will be stored in the log file unencrypted. In most cases, logging the command output via log_output is all that is required.

log_output If set, sudo will run the command in a pseudo tty and log all output that is sent to the screen, similar to the script(1) command. If the standard output or standard error is not connected to the user's tty, due to I/O redirection or because the command is part of a pipeline, that output is also captured and stored in separate log files.

Output is logged to the directory specified by the iolog_dir option (/var/adm/sudo-io by default) using a unique session ID that is included in the normal sudo log line, prefixed with ``TSID=". The iolog_file option may be used to control the format of the session ID.

Output logs may be viewed with the sudoreplay(1m) utility, which can also be used to list or search the available logs.



Последнее исправление: cetjs2 (всего исправлений: 7)

Проблема: Эту команду я использую раз в минуту на 4-6 серверов NTP

Вот это и правда проблема, зачем ты это делаешь руками и через sudo?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Вопрос некорректен, уход от темы.

Но дабы убить вопрос на корню приведу вырезку части моего скрипта. Скрипт мониторит систему, в данном случае NTP. Запускается раз в минуту. Но еще раз повторюсь: к вопросу почему не отрабатывает NOLOG_OUTPUT, это никак не относиться. Как и то, зачем я вообще мониторю систему. Не знаю как тут красиво выкладывать код поэтому как есть:

########################################## #ntp inf

vol11=0

function checkserv {

vol12=$1

vol10=`sudo ntpdate -d $vol12 2>/dev/null | grep stratum | awk '{split($0,a,","); print a[1]}' | awk '{print substr($0,9,2)}'`

if [ $vol10 -ge 11 ]

then

if [ $vol11 -eq 0 ]

then

vol11=1

stri

log_in

fi

echo «##########################################» >> $his

echo «Error on remote NTP server: $vol12» >> $his

sudo ntpdate -d $vol12 1>>$his 2>/dev/null

ping $vol12 -n 4 >> $his

fi

}

cat /etc/ntp.conf | grep -v -e «^#» -e «^$» | grep server | awk '{print $2}' | while read aa1 ; do checkserv $aa1 ; done

vol11=0

Shinma
() автор топика
Ответ на: комментарий от ymn

Спасибо

##########################################
#ntp inf
vol11=0
function checkserv {
vol12=$1
vol10=`sudo ntpdate -d $vol12  2>/dev/null | grep stratum | awk '{split($0,a,","); print  a[1]}' | awk '{print substr($0,9,2)}'`
if [ $vol10 -ge 11 ]
then
if [ $vol11 -eq 0 ]
then
vol11=1
stri
log_in
fi
echo "##########################################" >> $his
echo "Error on remote NTP server: $vol12" >> $his
sudo ntpdate -d $vol12 1>>$his 2>/dev/null
ping $vol12 -n 4 >> $his
fi
}
cat /etc/ntp.conf | grep  -v -e "^#" -e  "^$" | grep server | awk '{print $2}' | while read aa1 ; do checkserv $aa1 ; done
vol11=0
Shinma
() автор топика
Ответ на: Спасибо от Shinma

Замечательно, но зачем запускать это руками, а не повесить на cron от рута? Результаты будут приходить на почту, если это не достаточно оперативно для тебя, то можно прикрутить вместо echo что-то поинтереснее - jabber, skype, sms.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Если бы тут был счетчик постов я бы понял ваши сообщения. Давайте разберем ваш текст:

  • 1) «но зачем запускать это руками, а не повесить на cron от рута» Кто вам сказал, что я запускаю это дело руками каждую минуту? Разве такой текст был в шапке тему?
  • 2) «Результаты будут приходить на почту...итд» Кто вам сказал, что меня не устраивает место куда мой скрипт выводит сообщения?

Вы не разобрали кто, что куда пишет и в чем проблема ТС, но даете советы. Не надо читать того, что нет.

Конкретно лично для вас вопрос поставлю по другому:

  • 1) Почему не отрабатывает параметр NOLOG_OUTPUT в SUDOERS?
  • 2) Почему sudo пишет в syslog если указан параметр NOLOG_OUTPUT:
    ADMIN ALL=(root) NOLOG_OUTPUT:NOPASSWD: /usr/sbin/ntpdate -d*

Все, что не относится к ответу на эти вопросы, пустое занимание БД этого форума. Давайте подходить к вопросам адекватно, и не додумывать куда бы в сторону отвести тему.

Shinma
() автор топика
Ответ на: комментарий от Shinma

Добавлю

2) Почему sudo пишет в syslog если указан параметр NOLOG_OUTPUT:

ADMIN ALL=(root) NOLOG_OUTPUT:NOPASSWD: /usr/sbin/ntpdate -d*

Почему sudo пишет в syslog НЕ ВЫВОД команды, а само действие о том, что команда была использована. SUDO не пишет в syslog вывод результата команды, если я не указал это отдельно, а я этого не указывал, если посмотреть на текст сообщения.

Shinma
() автор топика
Ответ на: комментарий от Shinma

Мы не правильно поняли друг друга.'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:' Я думал, что эти опции могут отключить вывод в сислог сообщение о том, что команда была использована таким-то пользователем. Но это не так. Она открывает/закрывает только вывод команды в сислог. Вопрос по поводу NOLOG_OUTPUT отпал. остался вопрос как сделать так, чтобы в сислог не писался спам о том, что пользователь набрал в шеле определенную команду:

sudo any_command
Все остальные команды примененные с использованием sudo от этого пользователя писались в сислог.

Shinma
() автор топика

Решение:

Cmnd_Alias SCRIPT = /usr/sbin/ntpdate Defaults!SCRIPT !syslog

Shinma
() автор топика

А зачем дёргать ntpdate по крону, если есть ntpd или chrony, ну, то есть, тот демон, который и решает исходную задачу?

undertaker ★★
()
Ответ на: комментарий от undertaker

Ну вот не поверишь, раз в 1000 лет и палка стреляет. И у меня стрельнула. НТП демон падает через 5-15 минут если сервер времени вдруг с ничего просто так начинает передавать время больше чем +1024сек от обычного. это я к вопросу почему ntpdate. потому-что нтп демон может лежать мертвым и логи ты с утра никакие не получишь.

Вы скажете должно быть несколько нтп серверов, да они были. но демон не захотел на них переходить(почему - потмоу, что оказывается в юникс ОС и Лине нет ни одного лога в системе, чтобы кому-то, что-то предъявлять по поводу сбоя НТП серверов). в итоге я получил на сервере время минус 30 сек от нормы в 3 часа ночи через пару минут нтп сервер заработал в штатном режиме и мой сервер решил с ним синхронизироваться и скаканул вперед на 90 секунд. Но у меня ни логов, ни инфы, ничего. Админы НТП сервака в один голос спасая свой зад твердят - НТП сервера работали в это время без сбоев. сбои потом я им нашел и показал, но доказательства были косвенные на совсем левых серверах. В итоге понадобился скрипт который полностью ведет логирование любого косяка связанного с НТП. надеюсь логика понятна. имея логи я буду вести ситуацию в след раз, а не буду ведомым непонятной, неведомой, фигней.

Shinma
() автор топика
Ответ на: комментарий от Shinma

В принципе, логика ваша логика понятна. Но я бы рекомендовал посмотреть другие реализации демона ntpd - chrony, openntpd как минимум. Первый, кстати, умел логи писать куда попросите.

undertaker ★★
()
Ответ на: комментарий от undertaker

Ваши предложения не подходят т.к. этот софт под определенные ОС, но не мои. У меня ситуация немного иная и даже если бы эти программы существовали на мои системы мне надо было бы слишком много бюрократии победить, чтобы их установить. Овчинка выделки не стоит.

Shinma
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.