OVH Cloud OVH Cloud

Java - Policy et Permission

1 réponse
Avatar
Franck DARRAS
Bonjour,

Je travaille actuellement sur la sécurité Java et j'ai un petit soucis
pour récuperer de nouvelles permissions.

Mon fichier policy (auth.policy) correspond ressemble à ceci :
<code>
grant
codeBase "http://www.mywebsite.com"
Principal com.securite.ldap.LdapPrincipal "toto" {
permission com.securite.permission.URIPermission
"/myWebApp/editRegistration.do";
};
<code>

J'ai rajouté dans le fichier java.policy le lien vers le code précédent
policy.url.3=file:${java.home}/lib/security/auth.policy

Pour charger les différentes permissions, j'utilise le code suivant :
PolicyFile file = new PolicyFile();

Enumeration enum = file.getPermissions(new CodeSource(new
URL("http://www.mywebsite.com"),null)).elements();

Première information en mode debug.
1. L'objet file contient bien dans PolicyInfo puis policy entries les
informations de mon fichier (auth.policy). Par contre, je me retrouve
avec les informations suivantes pour une entrée :
- code source : host = www.mywebsite.com
- permission : UnresolvedPermission
- name (Permission) com.[...].URIPermission
- name (UnresolvedPermission) "/myWebApp/[...]do"
- type com.securite.permission.URIPermission

Première question : Comment se fait-il qu'il n'arrive pas à résoudre la
lecture du fichier et faire la disctinction entre la classe et la
valeur. (Prècision : une archive jar contenant la URIPermission à été
rajouté dans le classpath )

2. Ce point est peut être lié à l'erreur du premier point, mais je la
pose quand même.

Je ne comprend par le comportement de ma deuxième ligne de code.
(file.getPermissions). Quand j'exécute cette commande, il n'arrive pas à
retrouver les permissions de mon fichier. Il me propose toutes les
permissions pour chaque lancement d'une JVM pour tous les utilisateurs
sauf mes propres permissions

Voila, j'espère avoir décrit mon problème.

Si vous avez des pistes de réflexions pour corriger mon problème, je
suis à votre écoute.

Franck

1 réponse

Avatar
azubi
Franck DARRAS wrote:

Bonjour,

Je travaille actuellement sur la sécurité Java et j'ai un petit soucis
pour récuperer de nouvelles permissions.

Mon fichier policy (auth.policy) correspond ressemble à ceci :
<code>
grant
codeBase "http://www.mywebsite.com"
Principal com.securite.ldap.LdapPrincipal "toto" {
permission com.securite.permission.URIPermission
"/myWebApp/editRegistration.do";
};
<code>


ben comme premier commentaire, je dirais que ce n'est pas un policy file
standard mais un policy file pour JAAS . Donc les permissions affichées ne
seront valable que pour un utilisateur identifié comme "toto" par votre
serveur ldap.


J'ai rajouté dans le fichier java.policy le lien vers le code précédent
policy.url.3=file:${java.home}/lib/security/auth.policy


c'est pas dans java.security qu'il faut rajouter cette ligne ? Mais je ne
crois pas que ce soit vraiment nécessaire. Il suffit de lancer le programme
Java avec l'option "-Djava.security.policy=auth.policy" par exemple (ou
-Djava.security.auth.policy= ... si vous avez vraiment une application
JAAS)



Pour charger les différentes permissions, j'utilise le code suivant :
PolicyFile file = new PolicyFile();

Enumeration enum = file.getPermissions(new CodeSource(new
URL("http://www.mywebsite.com"),null)).elements()

Première information en mode debug.
1. L'objet file contient bien dans PolicyInfo puis policy entries les
informations de mon fichier (auth.policy). Par contre, je me retrouve
avec les informations suivantes pour une entrée :
- code source : host = www.mywebsite.com
- permission : UnresolvedPermission
- name (Permission) com.[...].URIPermission
- name (UnresolvedPermission) "/myWebApp/[...]do"
- type com.securite.permission.URIPermission

Première question : Comment se fait-il qu'il n'arrive pas à résoudre la
lecture du fichier et faire la disctinction entre la classe et la
valeur. (Prècision : une archive jar contenant la URIPermission à été
rajouté dans le classpath )


ben je ne sais pas trop ce que fait URIPermission (ça a pas trop l'air
standard sun). Normalement une permission est composée d'un nom de classe,
d'un nom d'argument et d'une suite d'actions que l'on peut appliquer à
l'argument. Faudrait peut-être vérifier encore une fois la sémantique de
votre URIPermission...


2. Ce point est peut être lié à l'erreur du premier point, mais je la
pose quand même.

Je ne comprend par le comportement de ma deuxième ligne de code.
(file.getPermissions). Quand j'exécute cette commande, il n'arrive pas à
retrouver les permissions de mon fichier. Il me propose toutes les
permissions pour chaque lancement d'une JVM pour tous les utilisateurs
sauf mes propres permissions


ben comme je l'ai dit plus haut, votre policy file n'est pas un policy file
"standard"... Si vous n'utilisez pas JAAS, essayez d'enlever la ligne
déclarant le "Principal"


Voila, j'espère avoir décrit mon problème.

Si vous avez des pistes de réflexions pour corriger mon problème, je
suis à votre écoute.


et juste un bout de début de commencement d'idées vagues ça vous va aussi
:-D


bonne soirée

claude


P.S. Il y a un livre assez sympa pour comprendre la sécurité Java. Ca
s'appelle "Java Security" de Scott Oaks chez O'reilly. Cependant, je dois
vous prévenir que les lois sur le copyright vous interdisent de retrouver
ce bouquin sur emule si vous n'en possédez pas un exemplaire...


Franck