Fichiers de règles de sécurité Java 2

Les spécifications Java™ 2 Platform, Enterprise Edition (J2EE) version 1.3 et ultérieure ont un modèle de programmation bien défini des responsabilités entre les fournisseurs de conteneur et le code d'application. Il est recommandé d'utiliser un gestionnaire de sécurité Java 2 pour faciliter la mise en application de ce modèle de programmation. Certaines opérations ne sont pas autorisées dans le code d'application car elles ont une incidence sur le comportement et le fonctionnement des conteneurs. Le gestionnaire de sécurité Java 2 est utilisé dans le produit pour mettre en oeuvre les responsabilités du conteneur et du code d'application.

Eviter les problèmes: Le serveur d'applications ne prend pas en charge une implémentation personnalisée du gestionnaire de sécurité Java.

Le produit WebSphere fournit le support pour la gestion du fichier de règles. Un certain nombre de fichiers de règles dans ce produit sont statiques ou dynamiques. La règle dynamique est un modèle de droits d'accès pour un type particulier de ressource. Aucune base de code relative n'est définie dans le modèle de règles dynamique. Cette valeur est calculée de manière dynamique à partir des données de déploiement et d'exécution.

fichiers de règles statiques

Tableau 1. Fichiers de règles statiques .

Ce tableau répertorie l'emplacement des fichiers de règles statiques.

Fichier de règles Emplacement
java.policy

[z/OS]racine_serveur_app/java/jre/lib/security/java.policy. Les droits par défaut sont accordés à toutes les classes. La règle de ce fichier s'applique à tous les processus lancés par WebSphere® Application Server.

server.policy racine_profil/properties/server.policy. Les droits par défaut sont accordés à tous les serveurs du produit.
client.policy racine_profil/properties/client.policy. Les droits par défaut sont accordés pour tous les conteneurs de client de produit et les applets sur un noeud.
Les fichiers de règles statiques ne sont pas gérés par des services de réplication ou de configuration. Les modifications apportées à ces fichiers sont locales et ne sont pas répliquées sur les autres noeuds de la cellule WebSphere Application Server Network Deployment .

fichiers de règles dynamiques

Tableau 2. Fichiers de règles dynamiques .

Ce tableau répertorie l'emplacement des fichiers de règles dynamiques.

Fichier de règles Emplacement
spi.policy
racine_profil/config/cells/cell_name
/nodes/node_name/spi.policy

Ce modèle s'applique à l'interface SPI (Service Provider Interface) ou à des ressources imbriquées dans le produit. Exemples de SPI : Java Message Service (JMS) dans MQ Series et pilotes JDBC (Java database connectivity). La base de code des ressources imbriquées est déterminée de manière dynamique à partir de la configuration (resources.xmlfichier) et les données d'exécution, ainsi que les droits d'accès définis dans lespi.policysont automatiquement appliqués à ces ressources et fichiers JAR qui sont spécifiés dans le chemin d'accès aux classes d'un adaptateur de ressources. Le droit par défaut de laspi.policyest java.security.AllPermissions.

library.policy
racine_profil/config/cells/cell_name/nodes
/node_name/library.policy

Ce modèle s'applique à la bibliothèque (Classes de bibliothèque Java). Vous pouvez définir une bibliothèque partagée à utiliser dans plusieurs applications du produit. Le droit par défaut de lalibrary.policyLe fichier estempty.

app.policy
racine_profil/config/cells/cell_name
/nodes/node_name/app.policy
Leapp.policydéfinit les droits par défaut qui sont accordés à toutes les applications d'entreprise s'exécutant sur nom_noeud dans nom_cellule.
Remarque: mises à jour de laapp.policyne s'appliquent qu'aux applications d'entreprise sur le noeud auquel le fichierapp.policyLe fichier appartient.
was.policy
racine_profil/config/cells/cell_name
/applications/ear_file_name/deployments/
application_name/META-INF/was.policy

Ce modèle s'applique aux droits d'accès propres à l'application. Lewas.policyest imbriqué dans le fichier d'archive d'entreprise (EAR).

ra.xml rar_file_name/META-INF/was.policy.RAR.

Ce fichier peut avoir une spécification de droits d'accès définie dans lera.xmlfichier binaire. Lera.xmlest intégré dans le fichier RAR.

Accorder les entrées qui sont spécifiées dans leapp.policyetwas.policyles fichiers doivent avoir une base de code définie. S'il existe des entrées d'octroi spécifiées sans base de code, les fichiers de règles ne se chargent pas correctement et l'application risque de d'échouer. Si votre intention consiste à octroyer les droits d'accès à toutes les applications, utilisez file:${application} comme base de code dans l'entrée d'octroi.

Syntaxe du fichier de règles

Un fichier de règles contient plusieurs règles. L'exemple ci-après présente le format de chaque règle :
grant [codebase <Codebase>] {
permission <Permission>;
 permission <Permission>;
permission <Permission>;
};

<CodeBase>: 	A URL.
			For example,  "file:${java.home}/lib/tools.jar"
						When [codebase <Codebase>] is not specified, listed 
               permissions are applied to everything.
						If URL ends with a JAR file name,  only the classes in the 
               JAR file belong to the codebase.
               If URL ends with "/", only the class files in the specified
               directory belong to the codebase.
               If URL ends with "*", all JAR and class files in the specified
               directory belong to the codebase.
               If URL ends with "-", all JAR and class files in the specified 
               directory and its subdirectories belong to the codebase.
<Permissions>: Consists from
							Permission Type  	: class name of the permission
     					Target Name      	: name specifying the target
     					Actions          	: actions allowed on target
			For example,
      			java.io.FilePermission "/tmp/xxx", "read,write"
Reportez-vous aux spécification SDK pour en savoir plus sur chaque droit d'accès.

Syntaxe de règles dynamique

Vous pouvez définir les droits d'accès pour des types de ressources spécifiques dans des fichiers de règles dynamiques d'une application d'entreprise. Cette action est effectuée à l'aide de symboles réservés propres au produit. La portée des symboles réservés varie en fonction du fichier dans lequel ils sont définis. Si vous définissez les droits dans leapp.policy, le symbole s'applique à toutes les ressources de toutes les applications d'entreprise qui s'exécutent sur nom_poste. Si vous définissez les droits dans leMETA-INF/was.policy, le symbole s'applique uniquement à l'application d'entreprise spécifique. Les symboles valides pour la base de code sont répertoriés dans le tableau ci-après :
Tableau 3. Syntaxe de la règle dynamique .

Ce tableau répertorie les symboles valides pour le codebase des fichiers de règles dynamiques.

Symbole Signification
file:${application} Les droits d'accès s'appliquent à toutes les ressources dans l'application.
file:${jars} Les droits d'accès s'appliquent à tous les fichiers JAR (archive Java) d'utilitaire dans l'application.
file:${ejbComponent} Les droits d'accès s'appliquent aux ressources EJB (Enterprise JavaBeans) dans l'application.
file:${webComponent} Les droits d'accès s'appliquent aux ressources Web dans l'application.
file:${connectorComponent} Les droits d'accès s'appliquent aux ressources du connecteur dans l'application.
Vous pouvez indiquer le nom du module pour un paramètre granulaire, sauf pour les entrées précisées par les symboles de base de code. Par exemple :
grant codeBase "file:DefaultWebApplication.war" {
   permission java.security.SecurityPermission "printIdentity";
 };

grant codeBase "file:IncCMP11.jar" {
permission java.io.FilePermission 
"${user.install.root}${/}bin${/}DefaultDB${/}-", 
"read,write,delete";
};
Les sixième et septième lignes de l'exemple de code précédent doivent être sur une même ligne. Vous pouvez utiliser une base de code relative uniquement dans leMETA-INF/was.policyfichier binaire. Plusieurs symboles réservés sont définis pour associer les listes de droits d'accès à un type de ressource spécifique.
Tableau 4. Syntaxe de la règle dynamique .

Ce tableau répertorie et décrit divers symboles réservés au produit définis pour associer les listes d'autorisations à un type de ressource.

Symbole Signification
file:${application} Les droits d'accès s'appliquent à toutes les ressources dans l'application.
file:${jars} Les droits d'accès s'appliquent à tous les fichiers JAR d'utilitaire dans l'application.
file:${ejbComponent} Les droits d'accès s'appliquent aux ressources des beans enterprise dans l'application.
file:${webComponent} Les droits d'accès s'appliquent aux ressources Web dans l'application.
file:${connectorComponent} Les droits d'accès s'appliquent aux ressources de connecteur, qu'elles soient dans l'application ou autonomes.
Cinq symboles imbriqués sont fournis pour indiquer le chemin d'accès et le nom de java.io.FilePermission. Ces symboles permettent une spécification de droits d'accès souple. Le chemin d'accès absolu reste identique une fois l'application installée.
Tableau 5. Syntaxe de la règle dynamique .

Ce tableau répertoire et décrit les symboles intégrés fournis pour indiquer le chemin d'accès et le nom de l'autorisation java.io.FilePermission.

Symbole Signification
${app.installed.path} Chemin d'accès à l'emplacement de l'installation de l'application.
${was.module.path} Chemin d'accès à l'emplacement d'installation du module.
${current.cell.name} Nom de cellule actuel
${current.node.name} Nom de noeud actuel
${current.server.name} Nom de serveur actuel
Attention: N'utilisez pas le${was.module.path}in the${application}.

Déterminez minutieusement où vous devez ajouter le nouveau droit d'accès. Si vous définissez un droit d'accès de manière incorrecte, l'exception AccessControlException est générée. Etant donné que les règles dynamiques résolvent la base de code lors de l'exécution, il est difficile de déterminer le fichier de règles présentant un problème. Ajoutez un droit d'accès uniquement aux ressources nécessaires. Par exemple :use ${ejbcomponent}etetcau lieu de${application}et mettez à jour lewas.policyà la place du fichierapp.policysi possible.

Filtrage de la règle statique

Un filtrage restreint de la règle statique est possible. Si l'élément XMLapp.policyet le fichierwas.policyont des droits d'accès définis dans le fichierfilter.policyavec le mot clé thefilterMask , l'environnement d'exécution supprime les droits des applications et un message d'audit est consigné. Toutefois, si les droits définis dans leapp.policyet duwas.policyLes fichiers sont des droits composés, par exemple, java.security.AllPermission, l'autorisation n'est pas supprimée, mais un message d'avertissement est consigné dans le fichier journal. Le filtrage des règles ne prend en charge que les droits du kit de développement ; le nom du package de droits commence parjavaoujavax.

Le filtrage des stratégies de l'environnement d'exécution est pris en charge pour renforcer le filtrage. Si l'élément XMLapp.policyet le fichierwas.policyont des droits d'accès définis dans le fichierfilter.policyavec le mot clé runtimeFilterMask, l'environnement d'exécution supprime les droits des applications, quels que soient les droits accordés à l'application. Par exemple, même si unwas.policycontient le fichier java.security.AllPermission accordée à l'un de ses modules, les autorisations spécifiées, telles que l'autorisation runtimeFilterMask, sont supprimées de l'autorisation accordée lors de l'exécution.

Edition du fichier de règles

A l'aide de l'outil de règles fourni par Developer Kit (app_server_root/java/jre/bin/policytool), pour éditer les fichiers de règles précédents est recommandé. Pour WebSphere Application Server Network Deployment, extrayez les fichiers de règles du référentiel avant de les éditer. Une fois le fichier extrait, utilisez l'outil policy pour le modifier. Les fichiers de règles modifiés doivent être replacés dans le référentiel et synchronisés avec d'autres noeuds.

Traitement des incidents

Si vous souhaitez déboguer des règles dynamiques, sélectionnez l'une des trois méthodes pour générer un rapport détaillé de l'exception AccessControlException.
  • Trace (Configuré par la trace RAS). Active la trace à l'aide de la spécification de trace :
    Attention: la commande suivante est une ligne continue
    com.ibm.ws.security.policy.*=all=enabled:
    com.ibm.ws.security.core.SecurityManager=all=enabled
  • Trace (Configuré par la propriété). Définit une propriété java.security.debug Java. Les valeurs valides pour la propriété java.security.debug sont :
    • Accès. Affiche toutes les informations de débogage, y compris les droits requis, le code, la pile et l'emplacement de la base de code.
    • Pile. Affiche les informations de débogage, y compris le droit requis, le code et la pile.
    • Echec. Affiche les informations de débogage, y compris le droit requis et le code.
  • ffdc. Activerffdc, modifiez leffdcRun.propertiesfichier en modifiantLevel=4etLAE=true. Recherchez un mot clé de violation d'accès dans le fichier journal.