Les ACl (Access Control Lists)
L'utilisation des ACL pour la protection d'objets permet de faire face aux exceptions à la règle « un objet appartient à un seul utilisateur ou sinon, à un seul groupe » imposée par le mode de protection standard par UIC..
Nous savons tous que les règles ont des exceptions, et c'est là que les choses se compliquent pour l'informaticien. Dans le cas de la protection d'objets, grouper ceux-ci par filiale ou département d'une organisation est simple et convient dans la plupart des cas. Souvent cependant, il y a dans un département un utilisateur dont les fonctions de superviseur, par exemple, requièrent un accès aux données de tous les autres départements. Cela boulverse alors les plans du responsable de la sécurité informatique.
Pour satisfaire à de tels cas d'exception, il est possible d'ajouter un niveau de protection supplémentaire par l'utilisation d'ACL. On peut accoler à un objet une liste d'utilisateurs en les identifiant par leur UIC ou encore à l'aide d'identificateurs, et indiquer pour ceux-ci de façon plus spécifique les permissions d'accès à l'objet.
Identificateurs
Ils sont numériques tout comme les UIC, et on peut également les représenter par des noms. De même que les UIC, ils résident dans la base de données des utilisateurs et peuvent être manipulés par le programme AUTHORIZE.
Ces identificateurs sont connus comme des droits d'accès, que l'on peut accorder à certains utilisateurs. Tous les utilisateurs auxquels on aura accordé un quelconque identificateur formeront alors un nouveau groupe, indépendant de ceux déterminés par les UIC. Pour retirer un utilisateur d'un tel groupe il suffit de lui révoquer l'identificateur. Les nouveaux groupes n'affectent en rien les permissions d'accès des utilisateurs, jusqu'à ce que l'on établisse de nouvelles règles par l'utilisation d'ACL se rapportant aux identificateurs.
$ MCR AUTHORIZE
UAF> ADD /ID SUPERVISEUR
UAF> SHOW /ID SUPERVISEUR
Name
Value
Attributes
SUPERVISEUR %X80010026
UAF> GRANT /ID SUPERVISEUR BOULE
%UAF-I-GRANTMSG, identifier SUPERVISEUR granted to BOULE
UAF> GRANT /ID SUPERVISEUR BILL
%UAF-I-GRANTMSG, identifier SUPERVISEUR granted to BILL
Les instructions précédentes ont d'abord créé un nouvel identificateur; OpenVMS lui a automatiquement donné une valeur hexadécimale de 80010026. Ensuite l'identificateur a été accordé aux utilisateurs BOULE et BILL.
ACE et ACL
Les ACL (Access Conntrol Lists) sont formés par une liste d'ACE (Access Control Entries). Un ACE peut porter sur un seul ou plusieurs utilisateurs et, pour identifier ceux-ci, on se servira soit du UIC, soit d'un identificateur. Chaque ACE contiendra ensuite la liste des accès permis pour l'objet par les utilisateurs spécifiés.
Ex.: | (IDENTIFIER=[120,64], ACCESS=READ+WRITE) | Utilisation du UIC |
(IDENTIFIER=[120,*], ACCESS=READ+WRITE) | Tout le groupe UIC 120 | |
(IDENTIFIER=[SYLTREM], ACCESS=EXECUTE) | L'utilisateur SYLTREM (son UIC porte également le nom SYLTREM) | |
(IDENTIFIER=[SYLTREM],ACCESS=NONE) | Aucun accès pour SYLTREM | |
(IDENTIFIER=SUPERVISEUR, ACCESS=READ) | Tous les utilisateurs auxquels on a accordé l'identificateur SUPERVISEUR |
Lorsqu'il y a plusieurs ACE pour un même objet, il faut tenir compte de
l'ordre d'entrée des ACE. Par exemple, si l'on désire donner un accès en lecture et
écriture à tous les utilisateurs du groupe UIC [120,*] sauf BRISEFER (dont le UIC est
[120,22]) qui lui n'a pas le droit d'écriture, on devra indiquer:
(IDENTIFIER=[BRISEFER],ACCESS=READ)
(IDENTIFIER=[120,*], ACCESS=READ+WRITE)
La liste étant analysée dans la séquence entrée: la première
indication concernant l'utilisateur BRISEFER est tenue en compte et les ACE suivants sont
ignorés. Ainsi dans l'exemple, BRISEFER n'aura pas accès en mode d'écriture, car le
premier ACE ne lui permet l'accès qu'en lecture seulement, même si le ACE suivant lui
aurait permis un accès en mode d'écriture.
À l'opposé, si on aurait inversé les ACE, l'accès en mode d'écriture lui aurait été
accordé immédiatement et le ACE suivant ignoré.
Il est à noter que les ACL ne sont analysés que si la protection par UIC n'accorde pas l'accès. Les ACL sont consultés pour vérifier les cas d'exception.
Protection d'objets par ACL
Pour attribuer des ACL à un objet, on peut entrer les ACE directement dans une instruction DCL, ou encore appeler l'éditeur ACL. Il y a lieu d'indiquer dans la commande le type d'objet avec le qualificatif /OBJECT_TYPE lorsque l'objet n'est pas un fichier. Les valeurs possibles sont: QUEUE, DEVICE, LOGICAL_NAME_TABLE, etc.
$ SET SECURITY /ACL=(IDENTIFIER=SUPERVISEUR,ACCESS=READ+WRITE)
PEYO.LIS
$ SET SECURITY /EDIT /OBJECT_TYPE=QUEUE ROBA$PRINT
Avec la première commande, on donne aux détenteurs de l'identificateur
SUPERVISEUR les droits en lecture et en écriture sur le fichier PEYO.LIS.
Dans la seconde commande, on appelle l'éditeur ACL pour modifier les ACE de la queue
d'impression ROBA$PRINT. L'éditeur offre des touches de fonctions pour faciliter
l'entrée d'ACE lorsque ceux-ci sont nombreux, et est une méthode plus convéniente et
flexible pour manipuler ceux-ci. Pour obtenir de l'aide dans l'éditeur ACL, appuyez sur
la touche PF2.
Pour voir le résultat de nos efforts, il suffit d'etrer les commandes
suivantes:
D'abord pour le fichier: $ DIRECTORY /ACL PEYO.LIS Directory BD$DISQUE:[SYLTREM] PEYO.LIS;3 (IDENTIFIER=SUPERVISEUR,ACCESS=READ+WRITE) PEYO.LIS;2 PEYO.LIS;1 Total of 3 files. |
Notez bien que seule la version courante du fichier a reçu la nouvelle protection. Nous verrons cela en détail plus loin dans cet article. |
Ensuite pour la queue d'impression: $ SHOW QUEUE ROBA$PRINT /FULL Batch queue ROBA$PRINT, idle, on BEDES:: /BASE_PRIORITY=4 /JOB_LIMIT=4 /OWNER=[SYLTREM] /PROTECTION=(S:M,O:D,G:R,W:RS) /WSDEFAULT=1024 /WSEXTENT=16384 /WSQUOTA=2048 (IDENTIFIER=[BOULE],ACCESS=READ+SUBMIT) (IDENTIFIER=[120,*],ACCESS=NONE) |
Propagation des protections par ACL
Comme nous l'avons vu dans l'exemple précédent, si l'on désirait donner la même protection ACL à toutes les versions d'un fichier il aurait fallu l'indiquer (c-à-d ;*). Toutefois lorsqu'un fichier est protégé par ACL, toute nouvelle version de celui-ci recevra la même protection à sa création.
Maintenant, on peut propager une protection à d'autres fichiers. Si on
veut donner les mêmes protections qu'un fichier existant, à un autre fichier, on peut le
faire de la façon suivante:
$ SET ACL /LIKE=(OBJECT_TYPE=FILE, OBJECT_NAME=PEYO.LIS) ROBA.TXT
Le fichier ROBA.TXT recevra les mêmes ACL que PEYO.LIS. Le même principe peut
s'appliquer à tout autre type d'objet, en autant qu'on indique son type avec le
qualificatif /OBJECT_TYPE=.
Il est également possible de faire en sorte que le ACL donné à un
répertoire soit propagé à tous les fichiers qui seront créés dans ce dernier. Pour ce
faire, il faut ajouter le qualificatif /OPTION=DEFAULT à chacun des ACE du fichier de
répertoire (.DIR); ainsi ils seront automatiquement propagés aux nouveaux fichiers
créés dans le répertoire.
$ SET SECURITY /ACL=(IDENTIFIER=[SYLTREM],OPTION=DEFAULT, ACCESS=READ+EXECUTE)
BEDES.DIR
Autres commandes
REVOKE /ID (dans AUTHORIZE)
SET RIGHTSLIST
EDIT /ACL
SET ACL et SET SECURITY - la deuxième commande remplace la première, mais les deux sont
toujours supportées