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.
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.
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.