Я использую Zabbix для мониторинга своей среды и zabbix_agentd
выполняю как пользователь zabbix
один пользовательский скрипт каждые 60 секунд; он использует sudo
для запуска этого скрипта как root
.
В /var/log/auth.log
I см через каждые 60 секунд:
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session closed for user root
Я хочу остановить это сообщение от затопления моего журнала. Я добавил следующую строку в /etc/pam.d/sudo
файл, непосредственно перед session required pam_unix.so
:
session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0
и сообщение исчезло.
Но проблема в том, что таким образом я подавляю каждое сообщение PAM, когда кто-то выполняет скрипт с sudo
as root
.
Я хочу остановить сообщение только для пользователя zabbix
(не всех других пользователей). sudo
знает, что zabbix
пользователь хочет выполнить скрипт с root
привилегиями и есть ли способ сообщить PAM, что? Как я могу сказать PAM не входить в систему для конкретного пользователя при использовании sudo
?
Примечание : я попытался отфильтровать сообщения в системном журнале; хотя это работает, у него та же проблема, что и выше, а именно, что оно слишком неразборчиво, так как в сообщении журнала не указывается, какой пользователь становится пользователем root.
источник
session closed for user root
и если я на самом деле его фильтрую, я фильтрую все сообщения. Я хочу для конкретного пользователя, который не упоминается в сообщении, и я не могу фильтровать по его имени ...Ответы:
Вы, кажется, довольно близки с вашей строкой конф. PAM:
Глядя на страницу руководства для
pam_succeed_if
, я думаю, вы хотите проверить, что запрашивающий пользователь (ruser
)zabbix
.Поэтому я предлагаю:
Это будет подавлять следующий тест, когда пользователь
zabbix
становитсяroot
(но никаких других переходов). Я проверил это с парой моих собственных пользователей.Удалите
uid = 0
описанный выше тест, если хотите сохранить молчание о том, чтобыzabbix
стать любым пользователем, а не просто пользователем root.Я удалил
service in sudo
тест: он избыточен, учитывая, что эта строка в/etc/pam.d/sudo
.источник
service in sudo
.[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
строку из журнала, вы можете добавить это в файл sudoers.d /:Defaults:[user] !logfile, !syslog
(заменить[user]
там, где это необходимо)/etc/sudoers.d/
- я предпочитаю использовать имя пользователя, группы или приложения, к которому это относится. См. Sudo.ws/man/1.8.15/sudoers.man.html:
есть. Иlogfiles
явное или что-то, что должно быть заменено?Основываясь на ответе Тоби, я нашел способ настроить это немного по-другому в Debian / Ubuntu. Для контекста, см .:
Итак, в Debian / Ubuntu есть эта
pam-auth-update
команда, и когда вы смотрите на/etc/pam.d/sudo
нее, это выглядит так:и
/etc/pam.d/common-session-noninteractive
выглядит так:Конечно, я мог бы отредактировать любой из вышеперечисленных файлов, но очевидно, что здесь есть некоторая «большая мощность». Как сделать так, чтобы мои изменения хорошо сочетались с другими пакетами, в которые можно добавить правила pam? В довершение всего, мне казалось, что я не могу просто добавить строку
/etc/pam.d/sudo
между@include
этими двумя, как это ..После прочтения приведенных выше ссылок, а также других примеров (см.
/usr/share/pam-configs/unix
) Я придумал следующее/usr/share/pam-configs/myapp
:Session
иSession-Type
контролировать, какие файлы редактируются, иPriority
определяет, в каком порядке они находятся . После добавления этого файла и запускаpam-auth-update
,/etc/pam.d/common-session-noninteractive
выглядит так (внизу :)... это то, что мы хотим, потому что наша
pam_succeed_if
линия должна прийти раньшеsession required pam_unix.so
. (Эта строка взята/use/share/pam-configs/unix
и имеет,Priority: 256
поэтому она заканчивается на втором месте.) Также обратите внимание, что я оставилservice = sudo
предикат, поскольку,common-session-noninteractive
кроме того, он может быть включен и в другие конфигурацииsudo
.В моем случае я уже упаковал свой код в качестве установщика .deb, поэтому я добавил
/usr/share/pam-configs/myapp
файл, добавилpam-auth-update --package
в своиpostinst
иprerm
сценарии, и я готов!Предостережение...
Если вы прочитали статью PAMConfigFrameworkSpec, на которую я ссылался выше , она определит
Session-Interactive-Only
параметр, но не сможет указать только неинтерактивные правила . Так же/etc/pam.d/common-session
было обновлено . Я не думаю, что есть способ обойти это. Если вы согласны с тем, что интерактивные сеансы не регистрируются для этого пользователя (это служебная учетная запись, верно?), То все должно быть готово!Бонус: как убрать вывод sudo log
Помимо
session openened|closed
строк, которые выдает PAM, в журналsudo
заносится дополнительная информация о выполняемой команде. Это выглядит так:Если вы также хотите удалить это, откройте эту ссылку и продолжите ниже ...
Итак ... вы, вероятно, знакомы с типичной
/etc/sudoers.d/___
настройкой, которая может сделать что-то подобное для учетной записи службы, которой нужны привилегии суперпользователя для некоторых действий:это может войти
/etc/sudoers.d/10_myuser
. Ну, кроме всего прочего, вы также можете указатьDefaults
. Обратите особое внимание на этот синтаксис'Defaults' ':' User_List
Теперь, посмотрите на раздел ОПЦИИ SUDOERS . Интересные биты включают
log_input
,log_output
но (вероятно), что более важно,syslog
иlogfile
. Мне кажется, что в последних версиях Debian либо rsyslog, либоsudo
log tostdout
илиstderr
по умолчанию. Так что для меня это было обнаружено в журнале journald для моей службы, а не, например,/var/log/auth.log
там, где это не будет смешиваться с журналами моего приложения. Чтобы удалить ведение журнала sudo, я добавил следующее,/etc/sudoers.d/10_myuser
чтобы оно выглядело так:YMMV, если вы чувствуете, что отключение ведения журнала создает проблемы с аудитом безопасности, вы также можете попытаться решить эту проблему с помощью фильтров rsyslog.
источник
success=1
(что пропускает следующее предложение) и (2) потому что, как вы указалиservice = sudo
, любое выполнение заданий CRON приводит кrequirement "service = sudo" not met by user "root"
. (И, возможно, другие побочные эффекты.) Тем не менее, ваши бонусы работали отлично! Спасибо.postinst
иprerm
скрипты выглядят?success=1
- Я бы предпочел не пропускатьpam_unix
вообще. Я только хочу прекратить запись выходных данных, которые,[default=ignore]
кажется, достигают очень хорошо, не пропуская pam_unix.cron
jobs иservice = sudo
: Возможно ли, что ваши задания cron работают как непривилегированный пользователь, но вы не вызываете ихsudo
как часть заданий cron?После довольно страшного тестирования и исследований я нашел рабочее решение для Debian Stretch (на Raspberry). Несомненно, есть несколько способов выполнить то, о чем просит OP. Но документация PAM огромна, поэтому большинство вещей на самом деле TL; DR.
/etc/rsyslog.d/anyname.conf
используя::msg, contains, "session opened for user root by pi" stop
/etc/pam.d/sudo
/usr/share/pam-configs/
/etc/sudoers.d/020_pi
Я покажу вам, как это сделать (2) и (4).
Чтобы избавиться от «сеанса открытия / закрытия»:
Мы хотим избавиться от следующего
/var/log/auth.log
спама:Сделай это:
Что имеет решающее значение здесь, является то , что
success=1
, значит , чтобы пропустить следующий пункт 1 (или в РАМ жаргоне «перепрыгнуть следующий модуль в стеке»), в случае успеха.От
man pam.conf
:Затем перезагрузите компьютер и дайте ему поработать несколько часов (например, для проверки заданий cron), чтобы проверить, что это работает. Затем обязательно восстановите права доступа к файлу, иначе у вас будет дыра в безопасности в вашей системе. (
sudo chmod 644 /etc/pam.d/sudo
)Чтобы избавиться от повторяющихся сообщений «TTY PWD COMMAND»:
Мы также хотим избавиться от таких сообщений:
В моем случае это было сгенерировано скриптом IDS, который запускал arp-scan каждые несколько минут. Чтобы удалить его из журналов, создайте следующий файл:
(Вот
xxx
имя вашей машины иpi
имя пользователя.)источник
sudo su -
тогда вам не нужно устанавливать опасные разрешения и рискуете забыть изменить его обратно.Ты получишь:
с вашим ответом.
работает, но вы все равно получите:
в ваших логах.
источник