Ad Widget

Collapse

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

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

    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, при проверке значение возвращает в консоль, а вот серверу значение не передается.

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


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

    Comment


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

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

      Comment


        #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


          #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


            #6
            Originally posted by Alex_UUU View Post
            А если так?
            ### 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


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

              Comment


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

                Comment


                  #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


                    #10
                    Originally posted by Kos View Post
                    У меня в аналогичной ситуации через 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


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

                      Comment


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

                        Comment


                          #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


                            #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


                              #15

                              Ну вот - тут всё понятно. При вызове sudo запрашивается пароль, т.к. неправильно задан список в файле sudoers:
                              Originally posted by Berg View Post
                              имеем вот что:
                              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

                              Announcement

                              Collapse
                              No announcement yet.
                              Working...
                              X