Ad Widget

Collapse

zabbix agent не отдает Item-key серверу

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Berg
    Junior Member
    • Feb 2019
    • 12

    #1

    zabbix agent не отдает Item-key серверу

    Доброго вечере коллеги.
    Работаю с zabbix-agent 3.4
    И так, чтобы не давать слишком много прав забиксу, стартует он как и положено от zabbix
    Но начал прикручивать конфиг для мониторинга телефонии и вот с чем столкнулся.
    При повышении старта агента до рутовых, итем вот такого типа: UserParameter=asterisk.uptime,asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}' отрабатывают и информация направляется серверу.
    Но когда я разрешаю в /etc/sudoers
    zabbix ALL=(ALL) NOPASSWD: /sbin/iptables, /bin/ps, /usr/sbin/asterisk
    итем обзаводится командой sudo, при проверке значение возвращает в консоль, а вот серверу значение не передается.

    Если кто с подобной проблемой боролся, подскажите как заставить это работать.

  • Berg
    Junior Member
    • Feb 2019
    • 12

    #2
    Не ужели ни кто не сталкивался или все тупо запускают zabbix с рутовыми правами?

    Comment

    • Alex_UUU
      Senior Member
      • Dec 2018
      • 541

      #3
      Так, насколько я понимаю выполняется команда
      asterisk.uptime,asterisk
      А в судо ты разрешаешь
      /sbin/iptables, /bin/ps, /usr/sbin/asterisk

      Что выдает sudo -u zabbix ну и далее твой скрипт

      Comment

      • Berg
        Junior Member
        • Feb 2019
        • 12

        #4
        Смысл немного в другом, я может чего не догоняю с правами и ка себя должна в таком случае вести ОСь:
        но в конфиг файле следующее:
        # Количество цепочек fail2ban в iptables
        UserParameter=asterisk.fail2ban_chain,sudo iptables -nL | grep Chain | grep -E 'f2b|fail2ban' | wc -l
        # Время работы службы asterisk
        UserParameter=asterisk.uptime,sudo asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}'

        Проверка параметров:
        привожу одну.
        #zabbix_agentd -c /etc/zabbix/zabbix_agentd.d/asterisk.conf -t asterisk.uptime
        asterisk.uptime [t|14946757]
        Но если запускать от zabbix:
        1. # sudo -u zabbix iptables -nL | grep Chain | grep -E 'f2b|fail2ban' | wc -l
        iptables v1.4.7: can't initialize iptables table `filter': Permission denied (you must be root)
        Perhaps iptables or your kernel needs to be upgraded.
        0
        ...
        2. # sudo -u zabbix asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}'
        Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

        Как я понял для iptables нужно придумывать костыль, ибо он не принимает обращение не от root.
        А для 2-й ошибки не хватает прав доступа.

        Но повторюсь, в конфиг файле то не фигурирует zabbix, для него только дано разрешение не запрашивать пароль при выполнении команды sudo my_script,

        Comment

        • Alex_UUU
          Senior Member
          • Dec 2018
          • 541

          #5
          А если так?
          ### Option: AllowRoot
          # Allow the agent to run as 'root'. If disabled and the agent is started by 'root', the agent
          # will try to switch to the user specified by the User configuration option instead.
          # Has no effect if started under a regular user.
          # 0 - do not allow
          # 1 - allow
          #
          # Mandatory: no
          # Default:
          # AllowRoot=0

          Comment

          • Berg
            Junior Member
            • Feb 2019
            • 12

            #6
            Originally posted by Alex_UUU
            А если так?
            ### Option: AllowRoot
            # Allow the agent to run as 'root'. If disabled and the agent is started by 'root', the agent
            # will try to switch to the user specified by the User configuration option instead.
            # Has no effect if started under a regular user.
            # 0 - do not allow
            # 1 - allow
            #
            # Mandatory: no
            # Default:
            # AllowRoot=0
            В том то и дело, что от рута не кашерно, да и не разрешают. Политика безопасности и всякая прочая головная боль.

            Comment

            • Kos
              Senior Member
              Zabbix Certified SpecialistZabbix Certified Professional
              • Aug 2015
              • 3404

              #7
              Может, я не в кассу, но разве при вызове через sudo не нужно указывать полный путь к вызываемой утилите (в том виде, как это прописано в файле /etc/sudoers)?
              Code:
              UserParameter=asterisk.uptime,sudo [COLOR=#0000FF]/usr/sbin/[/COLOR]asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}'

              Comment

              • Berg
                Junior Member
                • Feb 2019
                • 12

                #8
                Originally posted by Kos
                Может, я не в кассу, но разве при вызове через sudo не нужно указывать полный путь к вызываемой утилите (в том виде, как это прописано в файле /etc/sudoers)?
                Code:
                UserParameter=asterisk.uptime,sudo [COLOR=#0000FF]/usr/sbin/[/COLOR]asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}'
                Я пробовал и полный путь не срабатывает.
                К примеру с оператором ps работает даже без sudo, у него нет зависимостей требующих привилегий. А вот с iptables и asterisk такое не прохоидит. Там необходим запуск от рута, если с Asteriskom можно настроить права, что не есть правильно, то с iptables такое не пройдет его только через sudo побеждать.
                Но я не пойму как.

                Comment

                • Kos
                  Senior Member
                  Zabbix Certified SpecialistZabbix Certified Professional
                  • Aug 2015
                  • 3404

                  #9
                  У меня в аналогичной ситуации через sudo всё работает исправно. Правда, в моём случае в команде sudo ещё требовалось указывать параметр "-H" (корректно выставить переменную среды HOME в домашнюю директорию нужного пользователя), поскольку она использовалась в вызываемом скрипте.

                  Всё-таки покажите, пожалуйста, что у вас получается, если на машине с агентом выдать от пользователя zabbix команду:
                  Code:
                  sudo -H /usr/sbin/asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}'

                  Comment

                  • Berg
                    Junior Member
                    • Feb 2019
                    • 12

                    #10
                    Originally posted by Kos
                    У меня в аналогичной ситуации через sudo всё работает исправно. Правда, в моём случае в команде sudo ещё требовалось указывать параметр "-H" (корректно выставить переменную среды HOME в домашнюю директорию нужного пользователя), поскольку она использовалась в вызываемом скрипте.

                    Всё-таки покажите, пожалуйста, что у вас получается, если на машине с агентом выдать от пользователя zabbix команду:
                    Code:
                    sudo -H /usr/sbin/asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}'
                    # sudo -u zabbix /usr/sbin/asterisk -rx "core show uptime seconds" | grep --text -i "System uptime:" | gawk '{print $3}'
                    Unable to access the running directory (Permission denied). Changing to '/' for compatibility.
                    Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

                    Я полностью описал ситуацию, вы вполне можете ее воспроизвести в своей среде.
                    Статья по мониторингу астериск тут--> https://serveradmin.ru/monitoring-asterisk-v-zabbix/ автор не стал заморачиватся с правами и разрешениями, а просто запустил агента от рута..
                    Last edited by Berg; 15-02-2019, 20:57.

                    Comment

                    • Kos
                      Senior Member
                      Zabbix Certified SpecialistZabbix Certified Professional
                      • Aug 2015
                      • 3404

                      #11
                      Я не буду воспроизводить ситуацию в своей среде - у меня нет Астериска, и мне он не нужен.
                      Я лишь пытался помочь Вам с запуском sudo, но вместо моей просьбы попробовать от пользователя zabbix выполнить команду "sudo" (чтобы временно получить привелегии root-а) Вы зачем-то делаете противоположное: от пользователя root запускаете "sudo -u zabbix" (чтобы выполнить эту команду с привелегиями пользователя zabbix). Результат выполнения этой команды мы уже видели, из него очевидно, что для её выполнения пользователю zabbix прав недостаточно (как минимум, он не может добраться до какой-то из директорий).

                      Comment

                      • Berg
                        Junior Member
                        • Feb 2019
                        • 12

                        #12
                        Originally posted by Kos
                        Я не буду воспроизводить ситуацию в своей среде - у меня нет Астериска, и мне он не нужен.
                        Я лишь пытался помочь Вам с запуском sudo, но вместо моей просьбы попробовать от пользователя zabbix выполнить команду "sudo" (чтобы временно получить привелегии root-а) Вы зачем-то делаете противоположное: от пользователя root запускаете "sudo -u zabbix" (чтобы выполнить эту команду с привелегиями пользователя zabbix). Результат выполнения этой команды мы уже видели, из него очевидно, что для её выполнения пользователю zabbix прав недостаточно (как минимум, он не может добраться до какой-то из директорий).
                        У меня нет полноценно настроенной среды HOME. для пользователя zabbix, это не продуктивно, и не нужно. Настраивать среду под каждое приложение вы представляете что будет творится на сервере???

                        Comment

                        • Kos
                          Senior Member
                          Zabbix Certified SpecialistZabbix Certified Professional
                          • Aug 2015
                          • 3404

                          #13
                          Как-то нет у нас взаимопонимания :-(
                          Попробую перефразировать.

                          Агент Zabbix, как правило, работает от имени пользователя zabbix. Вы пытаетесь выполнить внешний скрипт, которому этих прав не хватает.
                          Обойти это можно с помощью утилиты sudo, которая разрешит конкретному пользователю выполнить конкретную команду (например, нужный скрипт) с повышенными привелегиями.
                          Вроде бы, Вы уже внесли нужные модификации в файл sudoers.
                          Осталось проверить, как это работает.

                          Для этого нужно:
                          • создать сессию пользователя zabbix. Судя по предыдущим цитатам, Вы заходите пользователем root. Ну ладно, выполните от root-а либо команду
                            Code:
                            su - zabbix
                            либо команду
                            Code:
                            sudo -s -u zabbix
                            Должен открыться шелл от имени пользователя zabbix - это и будет сессия этого пользователя.
                          • внутри этой сессии (т.е. от имени пользователя zabbix) выдайте команду:
                            Code:
                            sudo -H /usr/sbin/asterisk -rx "core show uptime seconds"
                            Выполнится ли она успешно или свалится с ошибкой? Если с ошибкой - то процитируйте эту ошибку здесь. Если всё ОК, то попробуйте повторить команду, но уже без параметра "-H" (чтобы понять, насколько он нужен конкретно в вашей ситуации).
                          • если всё выполняется нормально - то закрываете сессию (команда "exit", или просто Ctrl-D), а затем сравниваете работающий пример с тем, что у вас записано в конфиге агента Zabbix в директиве UserParameter. Если всё верно, то проверяете работоспособность агента с помощью утилиты zabbix_get.

                          Как-то так.

                          Comment

                          • Berg
                            Junior Member
                            • Feb 2019
                            • 12

                            #14
                            Kos Извините я тут приболел, не было возможности проверит.
                            Вот немного оклемался имеем вот что:
                            zabbix ALL=(ALL) NOPASSWD: /bin/ps /usr/sbin/asterisk /sbin/iptables


                            # sudo -s -u zabbix
                            bash-4.1$ sudo -H /usr/sbin/asterisk -rx "core show uptime seconds"

                            We trust you have received the usual lecture from the local System
                            Administrator. It usually boils down to these three things:

                            #1) Respect the privacy of others.
                            #2) Think before you type.
                            #3) With great power comes great responsibility.

                            [sudo] password for zabbix:


                            Comment

                            • Kos
                              Senior Member
                              Zabbix Certified SpecialistZabbix Certified Professional
                              • Aug 2015
                              • 3404

                              #15

                              Ну вот - тут всё понятно. При вызове sudo запрашивается пароль, т.к. неправильно задан список в файле sudoers:
                              Originally posted by Berg
                              имеем вот что:
                              zabbix ALL=(ALL) NOPASSWD: /bin/ps /usr/sbin/asterisk /sbin/iptables
                              Список альтернатив должен разделяться запятыми (и, возможно, пробелами): без этого вторая и третья команды воспринимаются как допустимые параметры при вызове первой команды (/bin/ps). Предыдущий раз было правильно, попробуйте поправить:
                              Code:
                              zabbix ALL=(ALL) NOPASSWD: /bin/ps, /usr/sbin/asterisk, /sbin/iptables
                              Обычно рекомендуется править этот файл не напрямую, а командой visudo (по умолчанию, она вызывает редактор vi)

                              Comment

                              Working...