projman/hlp/fr/tcl/safe.html
2015-10-19 14:27:31 +04:00

131 lines
19 KiB
HTML

<HTML><HEAD>
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
</HEAD>
<BODY>
<div><H3><b>Safe Tcl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Commandes Internes Tcl</b></H3></div>
<HR ALIGN="center">
<div><b>NOM</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Safe Base - Mécanisme pour la création et la manipulation d'interpréteurs sûr.
</div><br>
<div><b>SYNTAXE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;"><b>::safe::interpCreate</b> ?<i>slave</i>? ?<i>options...</i>? <br>
<b>::safe::interpInit</b> <i>slave</i> ?<i>options...</i>? <br>
<b>::safe::interpConfigure</b> <i>slave</i> ?<i>options...</i>? <br>
<b>::safe::interpDelete</b> <i>slave</i> <br>
<b>::safe::interpAddToAccessPath</b> <i>slave</i> <i>directory</i> <br>
<b>::safe::interpFindInAccessPath</b> <i>slave</i> <i>directory</i> <br>
<b>::safe::setLogCmd</b> ?<i>cmd arg...</i>?
</div><br>
<div><b>OPTIONS</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">?<b>-accessPath</b> <i>pathList</i>? ?<b>-statics</b> <i>boolean</i>? ?<b>-noStatics</b>? ?<b>-nested</b> <i>boolean</i>? ?<b>-nestedLoadOk</b>? ?<b>-deleteHook</b> <i>script</i>?
</div><br>
<div><b>DESCRIPTION</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Safe Tcl est un mécanisme pour exécuter des scripts Tcl étrangers sans risque et pour fournir un accès à de tels scripts potentiellement dangereux. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Safe Base s'assure que des scripts Tcl étrangers ne peuvent nuire à l'application hôte. Safe Base prévient les attaques d'intégrité et de sécurité. Les scripts étrangers sont empêchés de corrompre l'état de l'application ou de l'ordinateur hôte. Ces scripts sont également empêchés de révéler l'information stockée sur l'ordinateur principal ou dans l'application hôte à n'importe quel espion. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Safe Base permet à un interprèteur maître de créer des interprèteurs sécurisés et restreints qui contiennent un ensemble d'alias prédéfinis pour les commandes <A HREF="163.htm"><b>source</b></A>, <A HREF="134.htm"><b>load</b></A>, <A HREF="111.htm"><b>file</b></A>, <A HREF="101.htm"><b>encoding</b></A>, et <A HREF="106.htm"><b>exit</b></A> et peuvent employer des mécanismes d'auto-chargement et de paquet. </div>
<div ALIGN="LEFT" style="margin-left: 50px;">Aucune connaissance de la structure de système de fichiers n'est nécessaire à l'interprèteur sûr, parce qu'il accède seulement à un chemin virtuel contenant des repères. Quand l'interprèteur sûr demande le source d'un fichier, il emploie les repères dans le chemin&nbsp; virtuel en tant qu'élément du nom du fichier; l'interprèteur maître d'une manière transparente traduit les repères en vrais noms de répertoires et exécute l'opération demandée (voir la section <b>SECURITE</b> ci-dessous pour les détails). Différents niveaux de sécurité peuvent être choisis en employant les flags optionnels des commandes décrites ci-dessous. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Toutes les commandes fournies dans l'interprèteur maître par la commande Safe Base résident dans le namespace <b>safe</b>: </div>
<br>
<div><b>COMMANDES</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les commandes suivantes sont fournies dans le maître interpréteur:
<DL>
<DT><b>::safe::interpCreate</b> ?<i>slave</i>? ?<i>options...</i>?
</DT><DD>Crée un interprèteur sûr, installe les alias décrits dans la section ALIAS et initialise le mécanisme d'auto-chargement et de paquet comme indiqué par les <A HREF="298.htm"><b>options</b></A> fournies. Voir la section <b>OPTIONS</b> ci-dessous pour un description de l optionnel arguments. ci-dessous pour une description des&nbsp; arguments facultatifs. Si l'argument <i>slave</i> est omis, un nom sera généré.. <b>::safe::interpCreate</b> renvoie toujours le nom d'interprèteur.
</DD>
<DT><br><b>::safe::interpInit</b> <i>slave</i> ?<i>options...</i>?
</DT><DD>Cette commande est identique à <b>interpCreate</b> excepté qu'elle ne crée pas l'interprèteur sûr. <i>slave</i> doit avoir été créé par d'autres moyens, comme <b>interp </b><b>create-safe</b>.
</DD>
<DT><br><b>::safe::interpConfigure</b> <i>slave</i> ?<i>options...</i>?
</DT><DD>Si aucunes <i>options</i> ne sont données, renvoie les paramètres pour toutes les options de l'interprèteur sûr comme liste d'options et leurs valeurs courantes pour <i>slave</i>. Si un argument additionnel est fourni, renvoie une liste de 2 éléments <i>name</i> et <i>value</i><i>name</i> est le nom complet de cette option et <i>value</i> la valeur courante pour cette option et <i>slave</i>. Si plus de deux arguments additionnels sont fournis, il modifiera l'interprèteur sûr et changera chacunes et seulement les option fournies. Voir la section <b>OPTIONS</b> ci-dessous pour la description d'options. Exemple d'utilisation:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Crée un nouvel interp avec la même configuration que &quot;&#36;i0&quot; :
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set i1 &#91;eval safe::interpCreate &#91;safe::interpConfigure &#36;i0]]
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Obtient le deleteHook courant<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set dh &#91;safe::interpConfigure &#36;i0&nbsp; -del]
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Change (seulement) l'attribut de chargement statics ok d'un interp
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# et son deleteHook (laissant le reste inchangé) :<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;safe::interpConfigure &#36;i0&nbsp; -delete &#123;foo bar} -statics 0 ;<br>
</DD>
<DT><br><b>::safe::interpDelete</b> <i>slave</i>
</DT><DD>Efface l'interprèteur sûr et nettoie les structures de données&nbsp; principales correspondantes d'interprèteur. Si un script <i>deleteHook</i> a été spécifié pour cet interpréteur, il est évalué avant l'interpréteur que soit effacé, avec le nom de l'interpréteur comme argument additionnel.
</DD>
<DT><br><b>::safe::interpFindInAccessPath</b> <i>slave</i> <i>directory</i>
</DT><DD>Cette commande trouve et renvoie le jeton pour le vrai répertoire <i>directory</i> de l'accès au chemin virtuel courant de l'interprèteur sûr. Elle génère une erreur si le répertoire n'est pas trouvé. Exemple d'utilisation:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;slave eval &#91;list set tk_library &#91;::safe::interpFindInAccessPath &#36; name &#36;tk_library]]
</DD>
<DT><br><b>::safe::interpAddToAccessPath</b> <i>slave</i> <i>directory</i>
</DT><DD>Cette commande ajoute <i>directory</i> au chemin virtuel maintenu pour&nbsp; l'interprèteur sûr dans le maître, et retourne un jeton qui peut être utilisé dans l'interpréteur sûr pour obtenir accès aux fichiers dans ce répertoire. Si le répertoire est déjà dans le chemin virtuel, elle renvoie seulement le jeton sans ajouter le répertoire au chemin virtuel de nouveau. Exemple d'utilisation:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp&#36;slave eval &#91;list set tk_library &#91;::safe::interpAddToAccessPath &#36;nom &#36; tk_library]]
</DD>
<DT><br><b>::safe::setLogCmd</b> ?<i>cmd arg...</i>?
</DT><DD>Cette commande installe un script qui sera appelé quand les&nbsp; événements intéressants du cycle de vie se produisent pour un&nbsp; interprèteur sûr. Une fois appelée sans arguments, elle renvoie le script actuellement installé. Si appelée avec un&nbsp; argument, une chaîne vide, le script actuellement installé est&nbsp; enlevé et la journalisation est arrêtée. Le script sera appelé avec un argument supplémentaire, une chaîne décrivant l'évènement intéressant. Le but principal est d'aider le debugging des interpréteur sûrs. En utilisant ce service vous pouvez obtenir des message d'erreurs complets pendant que l'interpréteur sûr reçoit seulement des messages d'erreurs génériques. Ceci empêche l'interpréteur sûr de voir des messages au sujet des échecs et d'autres événements qui pourraient contenir une information sensible telle que de vrais noms de répertoire.
<br>Exemple d'utilisation:
<br>::safe::setLogCmd puts stderr
</DD>
</DL>
</div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Ci-dessous vous trouverez la sortie d'une session exemple dans laquelle un interpréteur sûr a essayé de &quot; sourcer &quot; un fichier non trouvé dans son chemin d'accès virtuel. Notez que l'interpréteur sûr a seulement reçu un message d'erreur disant que le fichier n'a pas été trouvé: </div>
<div ALIGN="LEFT" style="margin-left: 153px;">NOTICE for slave interp10 : Created<br>
NOTICE for slave interp10 : Setting accessPath=(/foo/bar) staticsok=1 nestedok=0 deletehook=()<br>
NOTICE for slave interp10 : auto_path in interp10 has been set to &#123;&#36;p(:0:)}<br>
ERROR for slave interp10 : /foo/bar/init.tcl: no such file or directory</div>
</div><br>
<div><b>OPTIONS</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les options suivantes sont communes à <b>::safe::interpCreate</b>, <b>::safe::interpInit</b>, et <b>::safe::interpConfigure</b>. N'importe quel nom d'option peut être abrégé à son nom non-ambigu minimal. Les noms d'option ne sont ne sont pas sensibles à la casse.
<DL>
<DT><b>-accessPath</b> <i>directoryList</i></DT><DD>Cette option place la liste de répertoires desquels l'interpréteur sûr peut <A HREF="163.htm"><b>source</b></A> et <A HREF="134.htm"><b>load</b></A> des fichiers. Si cette option n'est pas spécifiée, ou si elle est donnée comme liste vide, l'interpréteur sûr emploiera les même répertoires que son maître pour auto-chargement. Voir la section <b>SECURITE</b> ci-dessous pour plus de détail au sujet des chemins virtuels, des jetons et du contrôle d'accès.
</DD>
<DT><br><b>-statics</b> <i>boolean</i>
</DT><DD>Cette option indique si l'interpréteur sûr sera autorisé à charger les packages statiquement liés (comme <b>load &#123;} Tk</b>). La valeur par défaut est <b>true</b> : les interpréteur sûrs sont autorisé à charger les packages statiquement liés.
</DD>
<DT><br><b>-noStatics</b>
</DT><DD>Cette option est un raccourci de convenance pour <b>-statics false</b> et indique ainsi que l'interpréteur sûr ne sera pas autorisé à charger les packages statiquement liés.
</DD>
<DT><br><b>-nested</b> <i>boolean</i>
</DT><DD>Cette option spécifie si l'interpréteur sûr sera autorisé à charger des packages dans ses propre sous-interpréteurs. La valeur par défaut est <b>false</b>: les interpréteur sûrs ne sont pas autorisé à charger de packages dans leurs propres interprèteurs secondaires.
</DD>
<DT><br><b>-nestedLoadOk</b>
</DT><DD>Cette option est un raccourci de convenance pour <b>-nested true</b> et indique ainsi que l'interpréteur sûr sera autorisé à charger des packages dans ses propres interprèteurs secondaires.
</DD>
<DT><br><b>-deleteHook</b> <i>script</i>
</DT><DD>Quand à cette option est donné un <i>script</i> non vide, elle est évaluée dans le maître avec le nom de l'interprèteur sûr comme argument additionnel juste avant supprimer réellement l'interprèteur sûr. Donner une valeur vide enlève n'importe quel script d'effacement actuellement installé pour cet interpréteur sûr. La valeur par défaut (<b>&#123;}</b>) n'est n'avoir aucun appel de suppression.
</DD>
</DL>
</div><br>
<div><b>ALIAS</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les alias suivants sont fournis dans un interpréteur sûr:
<DL>
<DT><b>source</b> <i>fileName</i>
</DT><DD>Le fichier requis, un fichier source Tcl, est &quot;sourcé&quot; dans interpréteur sûr s'il est trouvé. L'alias <A HREF="163.htm"><b>source</b></A> peut seulement &quot; <i>sourcer &quot; </i>les fichier des répertoires qui se trouvent dans le chemin virtuel pour l'interpréteur sûr. L'alias <A HREF="163.htm"><b>source</b></A> exige de l'interpréteur sûr qu'il utilise un des noms de jeton dans son chemin virtuel pour désigner le répertoire dans lequel le fichier a &quot;sourcer&quot; peut être trouvé. Voir la section sur la <b>SECURITE</b> pour une discussion plus approfondie des restrictions sur les noms de fichiers valides.
</DD>
<DT><br><b>load</b> <i>fileName</i>
</DT><DD>Le fichier requis, un fichier objet partagé, est chargé dynamiquement dans l'interpréteur sûr s'il est trouvé. Le nom de fichier doit contenir le nom d'un jeton mentionné dans le chemin virtuel de l'interpréteur sûr pour être trouvé avec succès. De plus, le fichier objet partagé doit contenir un point d'entrée sûr; voyez la page de manueluel de la commande <A HREF="134.htm"><b>load</b></A> pour plus de détails.
</DD>
<DT><br><b>file</b> ?<i>subCmd args...</i>?
</DT><DD>L'alias <A HREF="111.htm"><b>file</b></A> donne accès à un sous ensemble sûr des sous-commandes de&nbsp; <A HREF="111.htm"><b>file</b></A>; il permet seulement les sous-commandes <b>dirname</b>, <A HREF="127.htm"><b>join</b></A>, <b>extension</b>, <b>root</b>, <b>tail</b>, <b>pathname</b> et <A HREF="164.htm"><b>split</b></A>. Pour plus de détails sur ces sous-commandes voyez la page de manueluel pour la commande<A HREF="111.htm"><b> file</b></A>.
</DD>
<DT><br><b>encoding</b> ?<i>subCmd args...</i>?
</DT><DD>L'alias <b>encoding</b> donne accès à un sous ensemble sûr des sous-commandes de <A HREF="101.htm"><b>encoding</b></A> il interdit de fixer l'encodage système, mais permet tout autre sous-commandes incluant <b>system</b> à vérifier l'encodage courant.
</DD>
<DT><br><b>exit</b>
</DT><DD>L'interprèteur appelant est supprimé et son traitement est arrêté, mais le processus Tcl dans lequel cet interprèteur existe n'est pas terminé.</DD>
</DL>
</div>
<br>
<div><b>SECURITE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">La Safe Base n'essaye pas d'empêcher complètement les attaques d'ennui et de deni de service. Ces formes d'attaque empêchent temporairement l'application ou l'utilisateur d'utiliser l'ordinateur pour effectuer des tâches utiles, par exemple en consommant tout le temps CPU ou tout l'affichage disponible. Ces attaques, quoique graves, sont considérées comme moins importantes en général que les attaques d'intégrité et d'intimité que la Safe Base doit empêcher. </div>
<div ALIGN="LEFT" style="margin-left: 50px;">Les commandes disponibles dans un interpréteur sûr, en plus de&nbsp; l'ensemble sûr comme défini en page de manueluel d'<A HREF="126.htm"><b> interp</b></A>, sont des alias de <A HREF="163.htm"><b>source</b></A>, <A HREF="134.htm"><b>load</b></A>, <A HREF="106.htm"><b>exit</b></A>, et des sous-ensembles sûrs de <A HREF="111.htm"><b>file</b></A> et <A HREF="101.htm"><b>encoding</b></A>. L'interpréteur sûr peut aussi auto-charger du code et il peut demander que des packages soient chargés.. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Puisque certaines de ces commandes accèdent au système de fichiers local, il y a un danger potentiel de fuites d'information au sujet de la structure des répertoires. Pour empêcher ceci, les commandes qui prennent des noms de fichier comme aguments dans un interpréteur sûr utilisent des jetons au lieu des noms réels de répertoires. Ces jetons sont traduits en nom réel de répertoire pendant qu'une requête pour, ex., sourcer un fichier est traitée par le maître interpréteur. Ce système de chemin virtuel est maintenu dans l'interprèteur principal pour chaque interprèteur sûr créé par <b>::safe::interpCreate</b> ou initialisé par <b>::safe::interpInit</b> et le chemin pointe des jetons accessibles dans l'interpréteur sûr vers les noms de chemin réels sur le système de fichier local empêchant de ce fait les interprèteurs sûrs de connaître la structure du système de fichiers de la machine sur lequel l'interprèteur s'exécute. Les seuls arguments valides de noms de fichier pour les alias <A HREF="163.htm"><b>source</b></A> et <A HREF="134.htm"><b>load</b></A> fournis à l'esclave sont des chemin sous la forme de <b>&#91;file join</b><i>tokenfilename</i><b>]</b> (ie, en utilisant les formats natifs de chemin: <i>token</i><b>/</b><i>filename</i> sous Unix, <i>token</i><b>&#92;</b><i></i><A HREF="113.htm"><i>filename</i></A> sous Windows, et <i>token</i><b>:</b><i>filename</i> sur Mac), où <i>token </i>représente un des répertoires de la liste <i>accessPath</i> et <i>filename</i> est un fichier dans ce répertoire (on ne permet aucun accès aux sous-répertoires). </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Quand un jeton est utilisé par un interpréteur sûr dans un requête pour &quot; sourcer &quot; ou charger un fichier, le jeton est vérifié et traduit en un nom réel de chemin et le fichier a &quot;sourcer&quot; ou chargé est localisé sur le système de fichier. L'interpréteur sûr n'a jamais connaissance du nom de chemin actuel sous lequel le fichier est stocké sur le système de fichier. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Pour empêcher une fuite d'information potentielle à partir de fichiers sensibles accidentellement inclus dans l'ensemble de fichiers qui peut être &quot;sourcé&quot; par un interpréteur sûr, l'alias <A HREF="163.htm"><b>source</b></A> restreint l'accès aux fichiers respectant les contraintes suivantes: le nom de chemin ne doit pas avoir plus de quatorze caractères, ne doit pas contenir plus d'un point (&quot;<b>.</b>&quot;), doit finir avec l'extension <b>.tcl</b> ou être appelé <b>tclIndex</b>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Chaque élément de la liste initiale de chemin d'accès sera assigné à un jeton qui sera placée dans l'<b>auto_path </b>de l'esclave et le premier élément de cette liste sera fixé en tant que <b>tcl_library</b> pour cet esclave. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si l'argument de chemin d'accès n'est pas donné ou est une liste vide, le comportement par défaut est de laisser l'esclave acceder aux mêmes packages que le maître (ou pour être plus précis: seulement les packages écrits en Tcl (ne peuvent pas être dangereux tant qu'ils fonctionnent dans l'interpréteur esclave) et les extensions C qui fournissent un point d'entrée Safe_Init). Dans ce but, l'<b>auto_path</b> du maître sera employé pour construire le chemin d'accès de l'esclave. Pour que l'esclave charge avec succès la bibliothèque Tcl (qui inclut le mécanisme d'auto-chargement) la <b>tcl_library</b> sera ajoutée ou déplacée à la première position si nécessaire, dans le chemin d'accès de l'esclave, ainsi la <b>tcl_library</b> esclave sera la même que celle du maître (son vrai chemin sera cependant toujours invisible à l'esclave). Pour que l'auto-chargement fonctionne de même pour l'esclave et le maître dans ce cas par défaut, les sous répertoires de premier-niveau de chaque répertoire dans l'<b>auto_path</b> du maître sera aussi ajouté (si aucun n'est déjà inclus) au chemin d'accès de l'esclave. Vous pouvez toujours indiquer un chemin plus restrictif pour lequel les sous répertoires ne seront jamais recherchés explicitement en spécifiant votre liste de répertoires avec le flag <b>-accessPath</b> au lieu de compter sur ce mécanisme par défaut. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Quand le <i>accessPath</i> est changé après la première création ou l'initialisation (c.a.d au travers de <b>interpConfigure -accessPath</b><i>list</i>), un <A HREF="129.htm"><b>auto_reset</b></A> est automatiquement évalué dans l'interpréteur sûr pour synchroniser son <b>auto_index</b> avec la nouvelle liste de jetons <br>
</div><br>
<div><b>VOIR EGALEMENT</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;"><A HREF="126.htm">interp</A>(n), <A HREF="129.htm">library</A>(n), <A HREF="134.htm">load</A>(n), <A HREF="143.htm">package</A>(n), <A HREF="163.htm">source</A>(n), <A HREF="174.htm">unknown</A>(n)</div><br>
<div>Dernière révision: 8.0</div>
<br>
<br><div ALIGN="CENTER"><A HREF="index.htm"><b>Index</b></A>&nbsp;&nbsp;<A HREF="157.htm"><b>Précédent</b></A>&nbsp;&nbsp;<A HREF="159.htm"><b>Suivant</b></A></div>
</BODY></HTML>