Sécurité des environnements de production, GridControl et sudo

La sécurité sont une des clés des environnements de production. Dans ce cadre administrateurs et outils doivent se plier à de multiples contraintes : VPN, DMZ et firewalls, token ou autre cryptocards, environnements avec authentifications fortes, propagation des identités entre les différents tiers, synchronisation des référentiels utilisateurs…Malgré tout, il faut être de plus en plus efficaces et échanger de plus en plus d’informations avec des systèmes tiers.

Les bugs [1] et les Critical Patch Update ne sont pas la première préoccupations des RSSI mais tracer les changements, tracer les intervenants ou superviser les informations accédées sont encore plus cruciaux. The Pythian Group a un savoir faire particulier dans ce domaine! Nous sommes capables de réaliser plus de 95% de nos interventions sur les environnements de bases de données Oracle (cf installations en mode silent, comme celles qui concernent RAC 10g et 11g) et MySQL sans interfaces graphiques, ce qui favorise leur enregistrement avec des outils simples comme la commande script ou screen. Depuis quelques mois, nous sommes également capables d’enregistrer l’ensemble de nos interventions via X-Window ou Terminal Server et d’archiver tous les fichiers utilisés. Nos clients peuvent ainsi auditer l’ensemble de nos opérations [2]. La solution est utilisée dans le cadre de règlementations comme PCI ou FDA.

Mais revenons à la sécurité et aux outils Oracle!

J’ai déjà posté plusieurs articles sur ce thème comme Grid Control, Agent 10g et HTTPS restreint à 443 ou encore Enterprise Users et iPlanet. Je vais continuer et en touchant 2 mots du paramétrage et l’utilisation du Grid Control dans des environnements avec délégation de privilèges avec en l’occurrence sudo. Ces techniques (1) obligent les administrateurs à se signer avec un compte dédier, (2) sont disponibles sur les environnements Linux, Unix et autre, (3) permettent de limiter les accès et (4) facilitent la traçabilité des opérations puisque chaque appel est stocké dans un fichier journal.

Avant de commencer…

sudo doit être utilisé de manière judicieuse et, trop souvent, l’implémentation associée équivaut à donnez un accès complet à l’utilisateur; voici quelques exemples d’erreurs à ne pas reproduire:

  • Ne pas mettre à jour sudo; comme tous les logiciels sudo contient certains flaws connus et qui peuvent être exploités
  • Positionner un accès sudo sur un script ou un programme modifiable par l’opérateur; l’exemple le plus commun dans le monde Oracle consiste à donner un accès à root.sh depuis Oracle. Celui-ci peut alors, impunément, lancer n’importe quelle instruction sous root en modifiant le dit script
  • Une variante de l’erreur précédente consiste à ne pas positionner le chemin complet du script dans le fichiers sudoers; l’utilisateurs peut alors créer un script avec le même nom dans un autre répertoire et l’utiliser pour exécuter la commande de son choix.
  • Ne pas empêcher le script ou programme d’exécuter un autre programme. Si par exemple, vous permettez l’utilisation de SQL*Plus avec sudo, qu’est-ce qui vous empêchera de taper !rm -rf $ORACLE_HOME ? (cf noexec)
  • Autoriser l’écriture de fichiers depuis le programme auquel vous donnez accès. Si par exemple, sshd est paramétré et permet une authentification par clé publique, vous pourriez alors ajouter les informations adéquates dans le fichier authorized_keys puis vous connectez sans mot de passe depuis un autre serveur ou depuis le compte de l’opérateur
  • Donner accès à des langages comme Perl ou Java en autorisant le passage de n’importe quel paramètre à l’aide du caractère wildcard.

Si vous voulez toujours augmenter vos privilèges, il existe d’autres techniques; vous pouvez utiliser les setuid bits et ownership de certains programmes oracle. Enfin, tout ceci ainsi que l’utilisation de visudo pour changer le paramètrage du fichier /etc/sudoers sont au delà du périmètre de cet article… Quoiqu’intéressant

Créer une configuration sudo dans le GridControl

L’utilisation de sudo ou de Power Broker pour lancer un script OS ou SQL est une nouvelle fonctionnalité d’Enterprise Manager 10.2.0.4. Le paramètrage associé est décrit dans la section Configuring Privilege Delegation Providers de la documentation. Pour commencer, vous devez installer EMCLI et utiliser les commandes create_privilege_delegation_setting et apply_privilege_delegation_setting pour d’une part créer une configuration (i.e. la syntaxe de la commande sudo ou pbrun qui dépend du système) et d’autre part d’associer la configuration au serveur:

  • Pour installer EMCLI, vous devez le télécharger à l’URL correspondante sur le Grid Control http://<oem-gridcontrol-url>:<port>/em/console/emcli/download
    Note: EMCLI peut-être installé sur n’importe quel ordinateur qui a accès au GridControl
  • Une fois emcli.jar téléchargé, installez le programme:
mkdir emcli
export DISTRIB=`pwd`

java -version

java -jar emcli.jar client
-install_dir=$DISTRIB/emcli
  • Configurez l’utilisation d’EMCLI:
cd emcli

mkdir -p strore/.emcli

./emcli setup
-url=http://<oem-gridcontrol-url>:<port>/em
-username=arkzoyd

java -jar emcli.jar client -install_dir=$DISTRIB/emcli
  • Créez une configuration sudo nommée mysudosettings01
./emcli create_privilege_delegation_setting 
-setting_name=mysudosettings01
-setting_type=SUDO
-settings="SETTINGS:/usr/bin/sudo -S -u %RUNAS% %command%"
  • Appliquez la configuration sur le serveur server1
./emcli apply_privilege_delegation_setting 
-setting_name=mysudosettings01
-target_type=host
-target_names=server1

Configurer sudo sur le serveur

Vous voilà presque prêt pour utilisez sudo. Enfin encore faut-il, pour que vous puissiez lancer un script SQL depuis le GridControl que vous ayez le droit d’exécuter le bon programme avec la commande sudo; Vous trouverez ci-dessous un extrait du fichier sudoers pour arriver à lancer un script SQL:

arkzoyd ALL= (oracle) /agent_home/perl/bin/perl /agent_home/sysman/admin/scripts/jobs/runSQLScript.pl *

Vous pouvez tester la configuration sudo depuis le serveur avant de la tester depuis le Grid Control

Autres remarques…

  • Vous pouvez utiliser sudo pour lancer des opérations sous l’utilisateur root. Ca peut-être très utile pour certaines opérations avec le clusterware ou certains scripts avancés
  • Vous remarquerez que ma configuration sudo a une faille; savez vous pourquoi?
  • Avez-vous jeté un oeil aux capacités d’Oracle Configuration Management Change Console (aka Active Reasoning) ?

[2] Un bug peut mener au pire, la preuve dans ce bug enregistrée pour le logiciel Blackgold !
[1] Une solution concurrente est disponible et contient une démonstration enregistrée!