4.4. Écrire une police pour le Java Security Manager

Introduction

Il y a une application nommée policytool dans la plupart des distributions JDK et JRE, ayant pour but la modification ou la création de polices de sécurité pour le Java Security Manager. Vous trouverez des informations sur policytool dans http://docs.oracle.com/javase/6/docs/technotes/tools/.

Informations de base

Une police de sécurité consiste en les éléments de configuration suivants :

CodeBase
L'emplacement de l'URL (à l'exclusion des informations sur l'hôte ou le domaine) d'où viennent les codes. Ce paramètre est en option.
SignedBy
L'alias est utilisé dans le fichier de clés pour référencer le signataire dont la clé privée a été utilisée pour signer le code. Cela peut être une valeur unique ou une liste séparée par des virgules. Ce paramètre est facultatif. Si omis, la présence ou l'absence de signature n'a aucun impact sur le gestionnaire de sécurité Java.
Principaux
Une liste de paires de principal_type/principal_name, qui doivent se trouver dans l'ensemble Principal du thread en cours d'exécution. L'entrée Principal est facultative. S'il est omis, il signifie « n'importe quel principal »
Permissions
Une permission est l'accès qui est accordé au code. De nombreuses autorisations sont fournies dans le cadre de la spécification Java Enterprise Edition 6 (Java EE 6). Ce document couvre uniquement les autorisations supplémentaires qui sont fournies par JBoss Enterprise Application Platform.

Procédure 4.2. Définir une police pour le Java Security Manager

  1. Démarrer policytool.

    Démarrer l'outil policytool d'une des façons suivantes.
    • Red Hat Enterprise Linux

      À partir de votre GUI ou invite de commande, exécuter /usr/bin/policytool.
    • Microsoft Windows Server

      Exécuter policytool.exe à partir du menu de Démarrage (Start) ou à partir de bin\ de votre installation Java. L'emplacement peut varier.
  2. Créer une nouvelle police.

    Pour créer une nouvelle police, sélectionner Add Policy Entry. Ajouter les paramètres dont vous aurez besoin, et cliquer sur Done.
  3. Modifier une police existante

    Sélectionner la police à partir d'une liste de polices existantes, et sélectionner le bouton Edit Policy Entry. Modifier les paramètres suivant les besoins.
  4. Supprimer une police existante.

    Sélectionner la police à partir d'une liste de polices existantes, et sélectionner le bouton Delete Policy Entry.

Permission spécifique à JBoss Enterprise Application Platform

org.jboss.security.SecurityAssociation.getPrincipalInfo
Donne accès aux méthodes org.jboss.security.SecurityAssociationgetPrincipal() et getCredential(). Le risque encouru avec cette permission est que l'on peut voir le thread de l'appelant et ses détails d'authentification.
org.jboss.security.SecurityAssociation.getSubject
Donne accès à la méthode org.jboss.security.SecurityAssociationgetSubject().
org.jboss.security.SecurityAssociation.setPrincipalInfo
Donne accès aux méthodes org.jboss.security.SecurityAssociationsetPrincipal(), setCredential(), setSubject(), pushSubjectContext(), et popSubjectContext(). Le risque encouru avec cette permission est que l'on peut voir le thread de l'appelant et ses détails d'authentification.
org.jboss.security.SecurityAssociation.setServer
Donne accès aux méthodes org.jboss.security.SecurityAssociationsetPrincipal(). Le risque encouru avec cette permission est que l'on peut activer ou désactiver le stockage multi-thread de l'appelant principal et ses détails d'authentification.
org.jboss.security.SecurityAssociation.setRunAsRole
Donne accès aux méthodes org.jboss.security.SecurityAssociationpushRunAsRole, popRunAsRole, pushRunAsIdentity, et popRunAsIdentity. Le risque encouru avec cette permission est que l'on peut voir le thread de l'appelant et ses détails d'authentification.
org.jboss.security.SecurityAssociation.accessContextInfo
Donne accès aux méthodes org.jboss.security.SecurityAssociationaccessContextInfo, et accessContextInfo. Cela vous permet les actions set et get pour définir et obtenir les informations de sécurité.
org.jboss.naming.JndiPermission
Fournit des permissions spéciales pour les fichiers et répertoires d'un chemin d'accès JNDI spécifié, ou bien de façon récursive pour tous les fichiers et sous-répertoires. Une JndiPermission consiste en un nom de chemin et un ensemble de permissions valides liées au fichier ou répertoire.
Les permissions disponibles sont les suivantes :
  • bind
  • rebind
  • unbind
  • lookup
  • list
  • listBindings
  • createSubcontext
  • all
Les noms de chemin d'accès se terminant par /* indiquent que les permissions indiquées s'appliquent à tous les fichiers et répertoires de nom du chemin. Les noms de chemin se terminant par /- indiquent des permissions récursives vers tous les fichiers et sous-directoires du nom du chemin. Les noms de chemins consistants avec le token <<ALL BINDINGS>> correspondent à n'importe quel fichier du répertoire.
org.jboss.security.srp.SRPPermission
Une classe de permissions personnalisées pour protéger l'accès à des informations sensibles SRP comme la clé de session privée et la clé privée. Cette autorisation n'a pas toutes les actions définies. La cible de getSessionKey donne accès à la clé de session privée qui résulte de la négociation SRP. L'accès à cette clé permet de chiffrer et de déchiffrer les messages qui ont été chiffrés avec la clé de session.
org.hibernate.secure.HibernatePermission
Cette classe de permissions fournit des permissions de base pour sécuriser les sessions Hibernate. La cible de cette propriété est le nom de l'entité. Les actions disponibles sont les suivantes :
  • insérer
  • supprimer
  • update
  • lecture
  • * (all)
org.jboss.metadata.spi.stack.MetaDataStackPermission
Fournit une classe de permission personnalisée pour contrôler la façon dont les appelants interagissent avec la pile de métadonnées. Les permissions disponibles sont les suivantes :
  • modifer
  • push (vers la pile)
  • pop (de la pile)
  • peek (dans la pile)
  • * (all)
org.jboss.config.spi.ConfigurationPermission
Sécurise la mise en place des propriétés de configuration. Définit uniquement les noms des cibles, mais aucune action. Les cibles pour cette propriété incluent :
  • <property name> (la propriété que ce code a la permission de définir)
  • * (all properties)
org.jboss.kernel.KernelPermission
Sécurise l'accès à la configuration du noyau. Définit uniquement les noms des cibles, mais aucune action. Les cibles pour cette propriété incluent :
  • access (à la configuration du noyau)
  • configure (implique accès)
  • * (all)
org.jboss.kernel.plugins.util.KernelLocatorPermission
Sécurise l'accès au noyau. Définit uniquement les noms des cibles, mais aucune action. Les cibles pour cette propriété incluent :
  • noyau
  • * (all)