Absichern des Frameworks, entfernen nicht nötiger CLI's

In diesem kurzen Artikel befassen wir uns mit der Absicherung unserer Hordeinstallation, der dem Hinweis des Nutzers Wolfgang S geschuldet ist. :-)

Funktionen, die keiner benötigt, brauchen auch nicht angeboten werden, auch wenn diese nur scheinbar einem kleiner Nutzerkreis vorbehalten sind. Ein kleiner Fehler in der Anwendung und man läuft Gefahr, Funktionen plötzlich für allen und jedermann zur Verfügung zu stellen.

Bild: Horde Framework - Administrationsmenü

Von Haus aus werden dem oder den Admin(as) mit administrativen Rechten beim Hordeframework drei CLI1)s angeboten:

  • die PHP Shell,
  • die SQL Shell und
  • die Command Shell oder auch als Befehlszeile bezeichnet.

Man findet diese links im Administrationsmenü. Leider existiert aktuell 2) keine Konfigurationsoption, diese Menüpunkte auszublenden, wir müssen als selbst Hand anlegen.

Als erstes setzen wir die hinterlegten Funktionen ausser Gefecht, in dem wir diese umbenennen und somit unerreichbar für die WEB-GUI machen. Wir wechseln dazu in das Verzeichnis /usr/share/horde/admin/, in dem die betreffenden PHP-Scripte liegen.

 # cd /usr/share/horde/admin/

Dort befinden siech unter anderem die drei „verdächtigen“ PHP-Scripte.

 # ll *shell.php
-rw-r--r--. 1 root root 1242 Dec  3 16:51 cmdshell.php
-rw-r--r--. 1 root root 2065 Dec  3 16:51 phpshell.php
-rw-r--r--. 1 root root 3245 Dec  3 16:51 sqlshell.php

Diese drei Scripte benennen wir nun einfach um.

 # mv cmdshell.php cmdshell.php.dist
 # mv phpshell.php phpshell.php.dist
 # mv sqlshell.php sqlshell.php.dist

Was jetzt noch fehlt ist die Entfernung der drei links im betreffenden Menü, weleche durch die Datei /usr/share/horde/lib/Api.php generiert wird. Dort deaktivieren wir die Einträge für die fraglichen drei Menüpunkte, in dem wir diese auskommentieren.

 # vim /usr/share/horde/lib/Api.php
<?php
/**
 * Copyright 2010-2014 Horde LLC (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL-2). If you
 * did not receive this file, see http://www.horde.org/licenses/lgpl.
 *
 * @category  Horde
 * @copyright 2010-2014 Horde LLC
 * @license   http://www.horde.org/licenses/lgpl LGPL-2
 * @package   Horde
 */
 
/**
 * Horde external API interface.
 *
 * This file defines Horde's external API interface. Other
 * applications can interact with Horde through this API.
 *
 * @category  Horde
 * @copyright 2010-2014 Horde LLC
 * @license   http://www.horde.org/licenses/lgpl LGPL-2
 * @package   Horde
 */
class Horde_Api extends Horde_Registry_Api
{
    /**
     * Returns a list of adminstrative links.
     *
     * @return array  Keys are link labels, values are array with these keys:
     *   - icon: (string) Graphic for page.
     *   - link: (string) Registry encoded link to page.
     *   - name: (string) Gettext label for page.
     */
    public function admin_list()
    {
        $admin = array(
            'configuration' => array(
                'link' => '%application%/admin/config/',
                'name' => _("_Configuration"),
                'icon' => 'config'
            ),
            'users' => array(
                'link' => '%application%/admin/user.php',
                'name' => _("_Users"),
                'icon' => 'user'
            ),
            'groups' => array(
                'link' => '%application%/admin/groups.php',
                'name' => _("_Groups"),
                'icon' => 'group'
            ),
            'perms' => array(
                'link' => '%application%/admin/perms/',
                'name' => _("_Permissions"),
                'icon' => 'perms'
            ),
            'locks' => array(
                'link' => '%application%/admin/locks.php',
                'name' => _("_Locks"),
                'icon' => 'locked'
            ),
            'alarms' => array(
                'link' => '%application%/admin/alarms.php',
                'name' => _("_Alarms"),
                'icon' => 'alarm'
            ),
            'sessions' => array(
                'link' => '%application%/admin/sessions.php',
                'name' => _("Sessions"),
                'icon' => 'user'
            ),
            /* Django : 2014-12-12
            aus Sicherheitsgründen die drei CLI-Menüeinträge deaktiviert  
            'phpshell' => array(
                'link' => '%application%/admin/phpshell.php',
                'name' => _("P_HP Shell"),
                'icon' => 'php'
            ),
            'sqlshell' => array(
                'link' => '%application%/admin/sqlshell.php',
                'name' => _("S_QL Shell"),
                'icon' => 'sql'
            ),
            'cmdshell' => array(
                'link' => '%application%/admin/cmdshell.php',
                'name' => _("_CLI"),
                'icon' => 'shell'
            )
            */
        );
 
        if (!empty($GLOBALS['conf']['activesync']['enabled'])) {
            $admin['activesync'] = array(
                'link' => '%application%/admin/activesync.php',
                'name' => _("ActiveSync Devices"),
                'icon' => 'mobile'
            );
        }
 
        return $admin;
    }
 
...

Voila, schon sind sowohl die Menüpunkte weg, wie auch die PHP-Scripte nicht mehr erreichbar.

Bild: Horde Framework - Administrationsmenü

Da bei jedem Update des Hordeframeworks, unsere Änderungen überschrieben werden, müssen wir leider dann erneut Hand anlegen und die Änderungen erneut vornehmen. Vielleicht gibt es ja mal in Zukunft einen eleganteren Weg, die CLIs dauerhaft auszublenden und unzugänglich zu machen.

Links


1)
Comannd Line Interfaces
2)
Stand: Dezember 2014
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
  • centos/mail_c7/horde_10.txt
  • Zuletzt geändert: 22.07.2019 15:09.
  • von 127.0.0.1