web-dev-qa-db-fra.com

Comment s'approprier des fichiers depuis la ligne de commande?

De temps en temps, je rencontre un fichier dont je dois m'approprier. J'utilise normalement cacls pour modifier les autorisations ntfs, mais il ne semble pas en être propriétaire. Sous * nix, je lancerais quelque chose comme chown me:me <file>. Existe-t-il une fenêtre équivalente à chown?

34
Joe

subinacl est l'outil puissant d'un administrateur système Windows pour tout faire avec la propriété et les ACL. Vous pouvez changer la propriété de quelqu'un d'autre que vous ( vous ne pouvez pas le faire avec l'interface graphique ).

subinacl /file test.txt /setowner=domain\foo

Cela vous permet de définir l'autorisation pour tout utilisateur que vous aimez, sans avoir à être administrateur (comme je pense que takeown.exe l'exige).

25
crb

Vous recherchez "TAKEOWN.EXE", qui était le premier dans Windows Server 2003 en tant que composant standard, et je crois un élément du kit de ressources avant. Il est disponible sur Windows 7 et peut-être sur les systèmes plus récents.

takeown /f <some-file-or-folder> /r

/r effectue l'opération de manière récursive sur tous les enfants du dossier spécifié. Contrairement à subinacl, vous devez vous connecter en tant qu'utilisateur avec lequel vous essayez de vous approprier; ou, vous pouvez simplement attribuer la propriété au groupe "Administrateurs".

Voici une copie de sa documentation, telle que conservée sur SS64 :

Syntaxe TAKEOWN [/ s Computer [/ u [Domain] UserName [/ p [Password]]]]/f FileName [/ a] [/ r [/ d {Y | N}]]]

Key/s Computer Le nom ou l'adresse IP d'un ordinateur distant (n'utilisez pas de barres obliques inverses). par défaut = ordinateur local. Ce paramètre s'applique à tous les fichiers et dossiers spécifiés dans la commande.

/ u [Domain] UserName Exécutez le script avec les autorisations du compte d'utilisateur spécifié. par défaut = autorisations système.

/ p [Mot de passe] Mot de passe du compte utilisateur spécifié dans le paramètre/u.

/ f FileName Nom de fichier, chemin UNC ou modèle de nom de répertoire. Accepte le caractère générique *

/ a Attribuez la propriété au groupe Administrateurs au lieu de l'utilisateur actuel.

/ r Effectue une opération récursive sur tous les fichiers du répertoire et des sous-répertoires spécifiés.

/ d {Y | N} Supprimez l'invite de confirmation qui s'affiche lorsque l'utilisateur actuel ne dispose pas de l'autorisation "Liste des dossiers" sur un répertoire spécifié et utilise à la place une valeur par défaut: Y: s'approprier le répertoire. N: ignorer le répertoire. Notez que vous devez utiliser cette option conjointement avec l'option/r. Si le paramètre/a n'est pas spécifié, la propriété du fichier est attribuée à l'utilisateur actuellement connecté à l'ordinateur.

Les modèles mixtes utilisant (? Et *) ne sont pas pris en charge par la commande de retrait.

Après avoir changé le propriétaire d'un fichier/dossier, vous pouvez ensuite attribuer des autorisations complètes aux fichiers, puis les lire ou les supprimer.

26
Evan Anderson

Prenez possession et tous les droits du dossier et tout ce qu'il contient:

takeown /F somedir /A /R
icacls somedir /grant:r User:F /T

Assurez-vous de démarrer l'invite de commande en tant qu'administrateur!

J'ai dû démarrer une invite de commande en tant qu'administrateur, cela a fonctionné pour moi dans Windows 8.1. Avec la maladresse de Windows 8.1, je devais rechercher "commande", faire un clic droit sur l'icône d'invite de commande. Pour moi afin de voir l'option "Exécuter en tant qu'administrateur". J'avais une invite de commande épinglée dans ma barre des tâches, mais un clic droit dessus ne montrerait pas l'option "exécuter en tant qu'administrateur".

Dans Windows 10, "Exécuter en tant qu'administrateur" devrait être à votre disposition en tant qu'option de clic droit.

Syntaxe de retrait :

takeown [/s <Computer> [/u [<Domain>\]<User name> [/p [<Password>]]]] /f <File name> [/a] [/r [/d {Y|N}]]

Référence de retrait .

Syntaxe Icacls :

icacls <FileName>[/GRANT [: r] <Sid>: <Perm> [...]] [/ Denegar <Sid>: <Perm> [...]] [/Remove [:g|:d]] <Sid> [...]] [/ t] [/ c] [/ l] [/ q] [/ setintegritylevel <Level>: <Policy> [...]]Icacls <Directory>[/ sustituir <SidOld><SidNew>[...]] [/ restore <ACLfile>[/ c] [/ l] [/q]]

Référence icacls .

17
chipiik

Je sais que c'est un vraiment ancien message, mais il existe un moyen intégré à Windows 7 et plus récent (peut-être dans Windows Vista, mais je ne suis pas sûr). Exécutez ce qui suit à partir d'une invite de commande escaladée dans le dossier que vous souhaitez réinitialiser. /t indique à icacls d'exécuter l'opération de manière récursive.

icacls .\* /setowner %UserDomain%\%UserName% /t
icacls .\* /reset /t

La première commande réinitialise le propriétaire à qui est connecté via les variables d'environnement. Bien sûr, un nom spécifique peut être utilisé à la place.

La deuxième commande force ensuite les autorisations à être ré-héritées dans l'arborescence à tous les dossiers et fichiers enfants.

J'espère que cela aidera quelqu'un à l'avenir.

8
Jim

Vous voudrez peut-être jeter un œil à SetACL , le couteau suisse de gestion des autorisations. Voici un exemple de la façon d'attribuer la propriété de tous les fichiers sur le lecteur C: aux "Administrateurs" et de supprimer la protection de l'héritage de tous les objets enfants en une seule fois:

SetACL.exe -on "C:\\" -ot file -actn setprot
           -op "dacl:np;sacl:nc"
           -rec cont_obj
           -actn setowner -ownr "n:S-1-5-32-544;s:y"

Vous pouvez également ajouter -silent.

6
Helge Klein

Pour Windows 2003, 2008 ou Vista ou 7, utilisez Takeown .

Pour Windows 2000, utilisez Fileowners.pl .

3
Dave Drager

Dans Windows Server 2003 R2 (et versions ultérieures), vous pouvez profiter de l'outil intégré icacls.exe pour modifier la propriété à partir de la ligne de commande, ainsi que de toutes les manipulations traditionnelles de cacls.exe sur lesquelles il se dilate ...

Notez que icacls.exe utilise par défaut le mode "édition", tandis que cacls.exe utilise par défaut le mode "remplacement" - un changement bienvenu pour ceux d'entre nous mordus (plus d'une fois) par cette petite nuance de cacls!

3
jnaab

Une autre alternative est fileacl Il est petit et peut activer/désactiver l'indicateur "hériter/ne pas hériter" de l'objet, contrairement à la plupart des utilitaires Windows.

1
Skelewir
  1. ouvrir l'invite de commande en tant qu'administrateur et passer au répertoire problématique
  2. prendre possession de tous les fichiers là-bas ... exemple: takeown /f *.jpg
  3. accorder des droits d'accès aux utilisateurs de votre choix ... exemple: icacls *.jpg /grant "Everyone":F (notez que dans Windows non anglais, "Tout le monde" peut ne pas exister, par exemple dans Windows allemand, il ne fonctionne qu'avec "Jeder" - un vrai truc que Windows traduit les options de commande!)
0
Jörg

J'ai trouvé une solution en utilisant les outils Windows: cacls

cacls <file or directory> /E /T /G <user>:F
0
chepseskaf