Jonctions et Liens Symboliques Récursifs
Recursive Junctions

Retour aux Liens NTFS
Retour à Robocopy

On a vu dans l'article sur les Liens NTFS que depuis Vista le système comprend quelques Liens NTFS récursifs, qui pointent vers leurs conteneurs. Si on enlève volontairement ou non les protections qui en interdisent l'accès, on obtient des effets de dossiers imbriqués, notés selon l'humeur et la culture de l'observateur comme effet boule de neige, poupées russes, vache qui rit....

On va voir différentes façons de produire ces phénomènes, et comment se rétablir : 

 

Sommaire

 

Création d'un lien récursif

Un dossier est créé, puis dans celui-ci, on crée un Lien Symbolique absolu pointant vers le dossier conteneur du lien.
La manip est acceptée. On peut se déplacer dans le dossier avec la commande CD.
On observe ensuite l'arborescence avec une commande DIR /S
La commande renonce quand la limite de 260 caractères est atteinte.
La commande RD /S a permis de supprimer le dossier.
L'encadré ci-dessous fait 2443 pixels de large, afficher en pleine page pour une meilleure lecture (F11).

U:\>md dossier

U:\>mklink /D dossier\link-de-dossier u:\dossier
Lien symbolique créé pour dossier\link-de-dossier <<===>> u:\dossier

U:\>cd dossier

U:\dossier>dir
Le volume dans le lecteur U s'appelle U
Le numéro de série du volume est 2875-D467

Répertoire de U:\dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets
3 Rép(s) 113 725 440 octets libres

U:\dossier>dir /S
Le volume dans le lecteur U s'appelle U
Le numéro de série du volume est 2875-D467

Répertoire de U:\dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [u:\dossier]
0 fichier(s) 0 octets

Répertoire de U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier

04/10/2009 06:21 <REP> .
04/10/2009 06:21 <REP> ..
04/10/2009 06:21 <SYMLINKD> link-de-dossier [.]
0 fichier(s) 0 octets
Le nom de répertoire U:\dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier\link-de-dossier est trop long.

Total des fichiers listés :
0 fichier(s) 0 octets
48 Rép(s) 113 725 440 octets libres

U:\dossier>cd..

U:\>rd dossier /S /Q

U:\>

 


Copie de Jonctions récursives

On vient de voir ce qui se passe quand on explore avec la commande DIR un dossier comportant une Jonction récursive.

Les Jonctions récursives qui posent souvent problèmes aux utilisateurs sont celles concernant "Application Data".
Recherche des jonctions concernant Application Data (présentation du résultat de la commande manuellement expurgée des éléments inutiles) :

C:\>dir "application data" /AL /S

Répertoire de C:\ProgramData
<JONCTION> Application Data [C:\ProgramData]

Répertoire de C:\Users\All Users
<JONCTION> Application Data [C:\ProgramData]

Répertoire de C:\Users\Default
<JONCTION> Application Data [C:\Users\Default\AppData\Roaming]

Répertoire de C:\Users\Default\AppData\Local
<JONCTION> Application Data [C:\Users\Default\AppData\Local]

Répertoire de C:\Users\JF
<JONCTION> Application Data [C:\Users\JF\AppData\Roaming]

Répertoire de C:\Users\JF\AppData\Local
<JONCTION> Application Data [C:\Users\JF\AppData\Local]

Repérées par *** sont les jonctions récursives :

C:\ProgramData\Application Data
C:\Users\All Users\Application Data
C:\Users\Default\Application Data
C:\Users\Default\AppData\Local\Application Data
C:\Users\JF\Application Data
C:\Users\JF\AppData\Local\Application Data
[C:\ProgramData] ***
[C:\ProgramData]
[C:\Users\Default\AppData\Roaming]
[C:\Users\Default\AppData\Local] ***
[C:\Users\JF\AppData\Roaming]
[C:\Users\JF\AppData\Local] ***

De cette situation on peut prédire des surprises lorsque des utilisateurs aventureux feront sauter la protection de la Jonction (sujet abordé à la section suivante), ou, ce qui nous intéresse ici, quand des sauvegardes seront effectuées sans tenir compte de la présence de Jonctions (anciens logiciels de sauvegarde, utilisation de commandes de copie sans exclusion des jonctions). 

L'exercice suivant va montrer l'effet de la copie d'un dossier comme ProgramData qui comporte une Jonction "Application Data" pointant sur son conteneur.
On reproduit pour l'expérience cette structure sur une clé USB formatée NTFS. On aurait pu choisir la véritable source c:\ProgramData
La copie du dossier est effectuée avec Robocopy. On oublie volontairement d'utiliser le commutateur /XJ (eXclure Jonctions)
Le commutateur /E permet de copier toute la structure, c'est-à-dire tous les dossiers, même les dossiers vides.
Le résultat est que robocopy tente bien de copier la Jonction : mais pas en tant que lien, il tente de copier son contenu.
Robocopy voit donc sans arrêt un sous-dossier Application Data à copier. Il va s'exténuer ainsi à la tâche jusqu'à blocage.
En copiant l'affichage de la console dans Bloc-Notes on peut facilement relever la colonne du curseur dans le texte.
On détermine ainsi que robocopy a rendu les armes lorsque le chemin a atteint 558 caractères.
Après un message "Analyse du répertoire source ... Le nom du fichier ne peut pas être résolu par le système. Attente de 30 secondes..." robocopy se met en devoir de faire un million d'essais espacés de 30 secondes (ce sont les valeurs par défaut quand on ne précise pas les commutateurs /R:nn et /W:nn).
Il faut alors mettre fin à l'opération en appuyant sur CTL+C.
Les opérations suivantes consistent à tenter de supprimer le dossier créé par la copie.
Les premiers essais sont des échecs. Il a fallu avancer dans l'arborescence des dossiers puis utiliser l'artifice de la commande subst.
L'encadré précédent faisait 2443 pixels de large, celui-ci fait 5000 pixels !

B:\>md ProgramData

B:\>mklink /J "ProgramData\Application Data" B:\ProgramData
Jonction créée pour ProgramData\Application Data <<===>> B:\ProgramData

B:\>robocopy programdata cible\ /E

-------------------------------------------------------------------------------
ROBOCOPY :: Copie de fichiers robuste pour Windows
-------------------------------------------------------------------------------

Début : Tue Oct 06 12:24:10 2009

Source : B:\programdata\
Dest : B:\cible\

Fichiers : *.*

Options : *.* /S /E /COPY:DAT /R:1000000 /W:30

-------------------------------------------------------------------------------

Nouveau rép. 0 B:\programdata\
Nouveau rép. 0 B:\programdata\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Nouveau rép. 0 B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
2009/10/06 12:24:11 ERREUR 1921 (0x00000781) Analyse du répertoire source B:\programdata\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\
Le nom du fichier ne peut pas être résolu par le système.
Attente de 30 secondes...^C

B:\>REM UTILISATION DE CTL+C (noté ^C dans la console) permet de stopper robocopy (rappel : par défaut il fait un million d'essais espacés de 30 secondes)

B:\>REM TENTATIVE DE SUPPRESSION DU DOSSIER CIBLE (échec)

B:\>rd /S /Q cible
cible\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1
- Le chemin d'accès spécifié est introuvable.

B:\>cd cible

B:\cible>rd /S /Q "Application Data"
Application Data\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1
- Le répertoire n'est pas vide.

B:\>REM EN UTILISANT LA TOUCHE TABULATION IL EST FACILE D'ALLER PLUS LOIN DANS L'ARBORESCENCE :

B:\cible>cd "Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data"
Nom de fichier ou extension trop long.

B:\cible>cd "Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data"

B:\cible\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data>rd /S /Q "Application Data"
Application Data\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1
- Le chemin d'accès spécifié est introuvable.

B:\cible\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data>cd "Application Data\Application Data\Application Data"
Nom de fichier ou extension trop long.

B:\cible\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data>rd /S /Q "Application Data"
Application Data\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1
- Le chemin d'accès spécifié est introuvable.

B:\>REM LE CHEMIN RESTANT EST ASSEZ COURT POUR TENTER UNE SUBSTITUTION EN MONTANT UN LECTEUR

B:\cible\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data>subst x: "Application Data"

B:\cible\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data>x:

B.\>REM DANS CE LECTEUR X LE CHEMIN EST DEVENU ACCESSIBLE, ON PEUT SUPPRIMER LA FIN DE L'ARBORESCENCE

X:\>rd /S /Q "Application Data"

X:\>b:

B:\cible\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data>cd\

B:\>rd /S /Q cible

B:\>subst x: /D

B:\>

Voici une vue dans l'explorateur de fichiers avec les dossiers B:\cible\Application Data\Application Data\Application Data\... créés par la copie de la Jonction récursive :

http://fspsa.free.fr/ng/application-data-recursifs.gif

On se rappellera donc qu'un Lien NTFS est sensé représenter le dossier qu'il pointe et que par conséquent, contrairement aux raccourcis habituels, ce n'est pas le lien qui est traité mais bien la cible du lien. Il faut vérifier les comportements des logiciels et des commandes selon ce qu'on veut obtenir.

Des commutateurs peuvent être utilisés, soit pour désigner le Lien NTFS plutôt que sa cible (/L avec attrib, icacls, /B avec xcopy ...), soit pour ignorer les Lien NTFS (/XJ avec robocopy).


Modification des ACE de la jonction récursive Application Data

On est sensé avoir connaissance de l'article Liens NTFS avant de lire cette section.

ACE = Access Control Entry
ACL = Access Control List

La Jonction c:\ProgramData\Application Data a pour cible son conteneur ProgramData.
Une interdiction d'accès au groupe "Tout le monde" protège l'utilisateur contre l'effet poupées russes.
la petite démo suivante consiste à remplacer l'interdiction d'accès au groupe "Tout le monde" par une autorisation.
On sauvegarde auparavant la liste de contrôle d'accès de la Jonction Application Data dans le fichier acl (avec /save /T). On aurait pu appeler ce fichier acl.txt car il est lisible dans Bloc-Notes. Toutefois il n'a pas tout-à-fait la structure d'un fichier texte, et il ne faut pas le modifier avec Bloc-Notes. C'est pour cela que la commande "type acl" ci-dessous n'affiche pas le premier caractère :

C:\Windows\system32>cd\

C:\>cd ProgramData

C:\ProgramData>dir /AL app*
<JONCTION> Application Data [C:\ProgramData]
0 fichier(s) 0 octets

C:\ProgramData>attrib "Application Data"
H I C:\ProgramData\Application Data

C:\ProgramData>icacls "Application Data"
Application Data Tout le monde:(DENY)(S,RD)
Tout le monde:(RX)
AUTORITE NT\SYSTEM:(F)
BUILTIN\Administrateurs:(F)

1 fichiers correctement traités ; échec du traitement de 0 fichiers

C:\ProgramData>icacls "Application Data" /save acl /T
fichier traité : Application Data
1 fichiers correctement traités ; échec du traitement de 0 fichiers

C:\ProgramData>type acl
p p l i c a t i o n D a t a
D : P A I ( D ; ; C C ; ; ; W D ) ( A ; ; 0 x 1 2 0 0 a 9 ; ; ; W D ) ( A ; ; FB A )

C:\ProgramData>icacls "Application Data" /grant "Tout le monde":(F)
fichier traité : Application Data
1 fichiers correctement traités ; échec du traitement de 0 fichiers

C:\ProgramData>icacls "Application Data"
Application Data Tout le monde:(F)
AUTORITE NT\SYSTEM:(F)
BUILTIN\Administrateurs:(F)

1 fichiers correctement traités ; échec du traitement de 0 fichiers

C:\ProgramData>

Résultat de l'opération :

http://fspsa.free.fr/ng/application-data-recursifs-icacls.gif

Pour réparer on restaure les ACE (Access Control Entries) précédemment sauvegardées dans le fichier acl :

C:\ProgramData>icacls "Application Data" /restore acl
fichier traité : Application Data\Application Data
1 fichiers correctement traités ; échec du traitement de 0 fichiers

C:\ProgramData>

Le fonctionnement normal est retrouvé :

http://fspsa.free.fr/ng/application-data-acces-refuse-bis.gif

Certains utilisateurs sont tentés de lever l'interdiction d'accès au groupe "Tout le monde" en utilisant l'Onglet Sécurité présent dans les Propriétés de "Application Data". Ils découvrent par la suite l'effet poupées russes. Pour réparer, utiliser à nouveau l'onglet sécurité pour interdire l'accès au groupe "Tout le monde". On peut aussi procéder en lignes de commandes en s'inspirant de la section Réparation d'une jonction :

   icacls     "c:\programdata\application data"  /DENY "tout le monde":(RD) /L
   attrib /L  "c:\programdata\application data" +H +I

C:\Users\NomDuProfil\AppData\Local\Application Data
Cette autre Jonction récursive pointe, comme on l'a vu plus haut, sur son conteneur "Local".
On peut la réparer au besoin avec :

icacls    "%userprofile%\AppData\Local\Application Data" /DENY "tout le monde":(RD) /L
attrib /L "%userprofile%\AppData\Local\Application Data" +i

%userprofile%
est une variable d'environnement représentant le profil de l'utilisateur en cours.
Entrer la commande SET dans une console CMD pour afficher les variables d'environnement, on y apprend beaucoup.
Faire la même chose dans une machine XP et comparer les résultats avec les valeurs obtenues dans une machine Vista ou WIN7.

Documents ans Settings
C:\Documents ans Settings n'est pas récursive, cette Jonction pointe simplement vers le dossier Utilisateurs, de son vrai nom C:\Users
Cependant cette Jonction est quand même protégée, ce qui a le don d'agacer les habitués de XP.
Les utilisateurs aventureux chercheront à faire sauter (inutilement) les protections.
On pourra donc procéder comme ci-dessus pour protéger à nouveau la Jonction "Documents and Settings".

Remarque
On peut utiliser le SID du groupe "Tout le monde", ça évite les problèmes de traduction (Everyone) :

   icacls "%homedrive%\documents and settings" /DENY "*S-1-1-0":(RD) /L

Cadenas
http://www.winhelponline.com/blog/lock-padlock-icon-files-folders-windows-7/
On remarque la présence d'un petit cadenas sur certaines icones. Il est présent lorsque l'objet est interdit au groupe "Tout le monde" ou lorsque ce groupe ne fait même pas partie de la liste sous l'onglet sécurité des propriétés de l'objet.
Un clic droit sur un objet offre l'item "Partager avec/Ne pas partager/Arrêter le partage".
Cette fonction a pour effet de supprimer le groupe "Tout le monde" de la liste. C'est une façon de faire réapparaître le cadenas.
Le cadenas n'est pas présent sur les Jonctions, car le commutateur /DENY coche la ligne "Autorisations spéciales" (tout en bas de la section "Autorisations pour ...").
Bien garder à l'esprit qu'une interdiction est prioritaire sur les autorisations.

 

 

 

Retour aux Liens NTFS
Retour à Robocopy

 


Merci d'avoir lu jusqu'ici !
Retour au début
Les restes du site
JF (Jean-François)
 

compteur Free
Publié le 04/04/2009