アクセスページの制限

# 概要
ZabbixのWebページに、アプリ担当者やオペレータに、一部の情報しか閲覧させたくないような場合、ソースのPHPファイルを編集することで、特定ページのみを閲覧できる環境を構築することができる。

# 環境
CentOS 6.5
zabbix2.2

# 手順

```

/usr/share/zabbix配下が、zabbixのドキュメントルートとする。
/usr/share/zabbix配下を/usr/share/monitorへコピーする。

# cd /usr/share
# mkdir monitor
# cp -pr zabbix/* monitor/

PHPファイル(/usr/share/monitor/include/menu.inc.php)を編集する。
隠したいページの配列をコメントアウトする。

# vi /usr/share/monitor/include/menu.inc.php
//                      array(
//                              'url' => 'dashboard.php',
//                              'label' => _('Dashboard'),
//                              'sub_pages' => array('dashconf.php')
//                      ),
//                      array(
//                              'url' => 'overview.php',
//                              'label' => _('Overview')
//                      ),
//                      array(
//                              'url' => 'httpmon.php',
//                              'label' => _('Web'),
//                              'sub_pages' => array('httpdetails.php')
//                      ),
                        array(
                                'url' => 'latest.php',
                                'label' => _('Latest data'),
                                'sub_pages' => array('history.php', 'chart.php')
                        ),
//                      array(
//                              'url' => 'tr_status.php',
//                              'label' => _('Triggers'),
//                              'sub_pages' => array('acknow.php', 'tr_comments.php', 'chart4.php', 'scripts_exec.php')
//                      ),
//                      array(
//                              'url' => 'events.php',
//                              'label' => _('Events'),
//                              'sub_pages' => array('tr_events.php')
//                      ),
                        array(
                                'url' => 'charts.php',
                                'label' => _('Graphs'),
                                'sub_pages' => array('chart2.php', 'chart3.php', 'chart6.php', 'chart7.php')
                ),
                        array(
                                'url' => 'screens.php',
                                'label' => _('Screens'),
                                'sub_pages' => array('slides.php')
                        ),
//                      array(
//                              'url' => 'maps.php',
//                              'label' => _('Maps'),
//                              'sub_pages' => array('map.php')
//                      ),
//                      array(
//                              'url' => 'discovery.php',
//                              'label' => _('Discovery'),
//                              'user_type' => USER_TYPE_ZABBIX_ADMIN
//                      ),
//                      array(
//                              'url' => 'srv_status.php',
//                              'label' => _('IT services'),
//                              'force_disable_all_nodes' => true,
//                              'sub_pages' => array('report3.php', 'chart5.php')
//                      ),
                        array(
                                'url' => 'chart3.php'
                        ),
                        array(
                                'url' => 'imgstore.php'
                        ),
                        array(
                                'url' => 'search.php'
                        ),
                        array(
                                'url' => 'jsrpc.php'
                        )
                )
        ),
//      'cm' => array(
//              'label'                         => _('Inventory'),
//              'user_type'                     => USER_TYPE_ZABBIX_USER,
//              'node_perm'                     => PERM_READ,
//              'default_page_id'       => 0,
//              'pages' => array(
//                      array(
//                              'url' => 'hostinventoriesoverview.php',
//                              'label' => _('Overview')
//                      ),
//                      array(
//                              'url' => 'hostinventories.php',
//                              'label' => _('Hosts')
//                      )
//              )
//      ),
//      'reports' => array(
//              'label'                         => _('Reports'),
//              'user_type'                     => USER_TYPE_ZABBIX_USER,
//              'node_perm'                     => PERM_READ,
//              'default_page_id'       => 0,
//              'pages' => array(
//                      array(
//                              'url' => 'report1.php',
//                              'label' => _('Status of Zabbix'),
//                              'user_type' => USER_TYPE_SUPER_ADMIN
//                      ),
//                      array(
//                              'url' => 'report2.php',
//                              'label' => _('Availability report')
//                      ),
//                      array(
//                              'url' => 'report5.php',
//                              'label' => _('Triggers top 100')
//                      ),
//                      array(
//                              'url' => 'report6.php',
//                              'label' => _('Bar reports'),
//                              'sub_pages' => array('popup_period.php', 'popup_bitem.php', 'chart_bar.php')
//                      ),
//                      array(
//                              'url

monitor用のZabbixページのApacheの設定ファイルを作成する。

# cp -p /etc/httpd/conf.d/zabbix.conf /etc/httpd/conf.d/zabbix-monitor.conf

ファイルを修正します。
# vi /etc/httpd/conf.d/zabbix-monitor.conf
#
# Zabbix monitoring system php web frontend
#

#Alias /zabbix /usr/share/zabbix
Alias /monitor /usr/share/monitor

<Directory "/usr/share/monitor">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

    php_value max_execution_time 300
    php_value memory_limit 128M
    php_value post_max_size 16M
    php_value upload_max_filesize 2M
    php_value max_input_time 300
    # php_value date.timezone Europe/Riga
</Directory>

<Directory "/usr/share/monitor/conf">
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>

<Directory "/usr/share/monitor/api">
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>

<Directory "/usr/share/monitor/include">
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>

<Directory "/usr/share/monitor/include/classes">
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>

編集後、Apacheを再起動しておきます。
# service httpd restart

```

閲覧者用のユーザ、ユーザグループを作成します。以下がサンプルです。

<img width="960" alt="zab1.png" src="https://qiita-image-store.s3.amazonaws.com/0/98996/2e8a64fd-cfea-742d-3e9a-02a2281bc675.png">


<img width="960" alt="zab2.png" src="https://qiita-image-store.s3.amazonaws.com/0/98996/fc160d21-1beb-1f4b-9c08-b1499a6d7214.png">

ここで注意すべきなのは、ログイン後のURLに「http://ZabbixサーバIPアドレス/monitor/latest.php」を指定することです。
コメントアウトしたページには、アクセスできないので、ログイン後にエラーで出力されます。

<img width="960" alt="zab4.png" src="https://qiita-image-store.s3.amazonaws.com/0/98996/d4fa8746-ffc1-3774-3981-dca78a62f1a3.png">


これで完成です。
閲覧者には、Zabbixへのアクセスは、「http://ZabbixサーバのIPアドレス/monitor」だと伝えましょう。作成したtestユーザでアクセスしてみます。
※知っている人は、「http://ZabbixサーバのIPアドレス/zabbix」が、本来のZabbixのアクセスする場所だとわかっているので、こちらも場所をかえたり、F/W(iptables)やApacheの設定でアクセス制限をするのがいいでしょう。


<img width="746" alt="zab5.png" src="https://qiita-image-store.s3.amazonaws.com/0/98996/4789e5d5-fa3d-9b19-5076-43d21adece42.png">

「監視データ」の下に「最新データ」、「グラフ」、「スクリーン」しかないのが、確認できます。

<img width="954" alt="zab6.png" src="https://qiita-image-store.s3.amazonaws.com/0/98996/e729f9de-c4a8-92fe-19b2-00fd2b0789c2.png">