Utilisez icacls pour créer un répertoire en lecture seule sous Windows 7

0

J'essaie de tester certaines exceptions de système de fichiers dans une application basée sur Java.

Je dois trouver un moyen de créer un répertoire situé sous% TMP% défini en lecture seule.

Essentiellement sur les plateformes UNIX / POSIX, je peux effectuer un chmod -w et obtenir cet effet. Sous Windows 7 / NTFS, ceci est bien sûr une histoire différente.

Je rencontre plusieurs problèmes à ce sujet. Mon utilisateur a le droit "administratif" (bien que cela ne soit pas toujours le cas) et, en tant que tel, le répertoire est créé avec une liste de contrôle d'accès comprenant:

  • AUTORITÉ NT \ SYSTÈME
  • BUILTIN \ Administrateurs
  • <mon utilisateur actuel>

Existe-t-il un moyen d'utiliser icacls pour obtenir essentiellement ce répertoire dans un état où il est en lecture seule? PÉRIODE, effectuer mon test, puis restaurer la liste de contrôle d'accès pour la supprimer?

EDIT Grâce aux informations fournies par @Ansgar Wiechers, j'ai pu proposer une solution.

J'ai utilisé ce qui suit:

icacls dirname /deny %username%:(WD)

Dans la page située ici, j'ai trouvé ceci dans la section des remarques:

icacls preserves the canonical order of ACE entries as:
  * Explicit denials
  * Explicit grants
  * Inherited denials
  * Inherited grants

En exécutant la commande icalcs ci-dessus, j'ai pu définir la capacité de l'utilisateur actuel à écrire ou à ajouter des fichiers (WD) au répertoire à refuser.

Ensuite, il était question de le renvoyer à un état post-test:

icacls dirname /reset /t /c

Terminé

Dave G
la source

Réponses:

1

Si votre utilisateur dispose de droits d'administrateur, il peut toujours récupérer toutes les autorisations que vous lui révérez. Les comptes d'administrateur sous Windows sont à peu près identiques à root sous Linux à cet égard.

Ce que vous pouvez faire, cependant, est de créer une liste de contrôle d' denyaccès à laquelle l'accès en écriture est autorisé Everyone. Cela rend un dossier en lecture seule comme il peut l'être sous Windows.

icacls DIRECTORY /deny Everyone:(CI)(OI)W

Attention, les denyACL remplacent toujours les allowACL. Ainsi, même si un accès explicite est accordé à une personne, son accès sera toujours refusé.

Ansgar Wiechers
la source
C'est assez proche de ce dont j'avais besoin
Dave G
Merci encore pour ça. Fondamentalement, j’avais juste besoin de cela pour un test avec l’utilisateur actuel, donc le réglage pour Tout le monde est un peu excessif.
Dave G