Wie übernehme ich den Besitz von Dateien über die Befehlszeile?

34

Von Zeit zu Zeit stoße ich auf eine Datei, deren Besitz ich übernehmen muss. Normalerweise verwende ich caclszum Ändern von ntfs-Berechtigungen, aber es scheint keinen Besitz zu haben. Unter * nix würde ich sowas laufen lassen chown me:me <file>. Gibt es ein Windows-Äquivalent zu chown?

Joe
quelle
Schade, dass setACL mit dem obigen Skript nicht funktioniert. Fehlermeldungen auf Win XP, 7 und 8 und Sie müssen ein Profi sein, um herauszufinden, was daran falsch ist

Antworten:

25

subinacl ist das Power-Tool eines Windows- Systemadministrators für alles, was mit Besitz und ACLs zu tun hat. Sie können den Eigentümer auf eine andere Person als Sie selbst ändern ( dies ist mit der GUI nicht möglich ).

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

Auf diese Weise können Sie die Berechtigung für einen beliebigen Benutzer festlegen, ohne ein Administrator sein zu müssen (wie ich glaube, dass takeown.exe dies erfordert).

crb
quelle
Nicht gültig für Windows XP kann ich herunterladen Subinacl.exe (Windows 2003 Resource Kit) , und verwenden Sie es in Windows XP?
Kiquenet
Sicher kannst du! Das ist wahrscheinlich, woher ich es habe. Versuchen Sie es hier .
crb
26

Sie suchen nach "TAKEOWN.EXE", das erstmals in Windows Server 2003 als Standardkomponente verwendet wurde, und ich glaube, dass ein Resource-Kit-Element bereits vorhanden ist. Es ist unter Windows 7 und möglicherweise auf neueren Systemen verfügbar.

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

/rFührt die Operation rekursiv für alle untergeordneten Elemente des angegebenen Ordners aus. Im Gegensatz subinacldazu müssen Sie sich als der Benutzer anmelden, mit dem Sie den Besitz übernehmen möchten. Sie können der Gruppe "Administratoren" auch einfach den Besitz zuweisen.

Hier ist eine Kopie der Dokumentation, wie auf SS64 erhalten :

Syntax TAKEOWN [/ s Computer [/ u [Domain] Benutzername [/ p [Passwort]]] / f Dateiname [/ a] [/ r [/ d {J | N}]]

Schlüssel Computer Der Name oder die IP-Adresse eines Remotecomputers (keine umgekehrten Schrägstriche verwenden). Standard = lokaler Computer. Dieser Parameter gilt für alle im Befehl angegebenen Dateien und Ordner.

/ u [Domäne] Benutzername Führen Sie das Skript mit den Berechtigungen des angegebenen Benutzerkontos aus. Standard = Systemberechtigungen.

/ p [Kennwort] Das Kennwort des Benutzerkontos, das im Parameter / u angegeben ist.

/ f Dateiname Der Dateiname, der UNC-Pfad oder das Verzeichnisnamensmuster. Akzeptiert das Platzhalterzeichen *

/ a Erteilen Sie der Gruppe Administratoren anstelle des aktuellen Benutzers den Besitz.

/ r Führt eine rekursive Operation für alle Dateien im angegebenen Verzeichnis und in den angegebenen Unterverzeichnissen aus.

/ d {Y | N} Unterdrücken Sie die Bestätigungsaufforderung, die angezeigt wird, wenn der aktuelle Benutzer nicht über die Berechtigung "Ordner auflisten" für ein bestimmtes Verzeichnis verfügt, und verwenden Sie stattdessen einen Standardwert: Y: Übernehmen Sie den Besitz des Verzeichnisses. N: Überspringe das Verzeichnis. Beachten Sie, dass Sie diese Option in Verbindung mit der Option / r verwenden müssen. Wenn der Parameter / a nicht angegeben wird, erhält der Benutzer, der derzeit am Computer angemeldet ist, den Dateibesitz.

Gemischte Muster mit (? Und *) werden vom Befehl takeown nicht unterstützt.

Nachdem Sie den Eigentümer für eine Datei / einen Ordner geändert haben, können Sie den Dateien die vollständigen Berechtigungen zuweisen und sie anschließend lesen oder löschen.

Evan Anderson
quelle
Zurückgezogener Inhalt microsoft.com/en-US/download/details.aspx?id=53314
Kiquenet
SS64 hat einen besseren Dokumentationslink: ss64.com/nt/takeown.html
jpaugh
17

Übernehmen Sie das Eigentum und die vollen Rechte an der Mappe und allem, was sich darin befindet:

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

Stellen Sie sicher, dass Sie die Eingabeaufforderung als Administrator starten!

Ich musste als Administrator eine Eingabeaufforderung starten, diese funktionierte bei mir in Windows 8.1. Unter Windows 8.1 musste ich nach "command" suchen und mit der rechten Maustaste auf das Eingabeaufforderungssymbol klicken. Für mich, um die Option "Als Administrator ausführen" zu sehen. Ich hatte eine Eingabeaufforderung in meiner Taskleiste, aber wenn ich mit der rechten Maustaste darauf klicke, wird die Option "Als Administrator ausführen" nicht angezeigt.

In Windows 10 sollte "Als Administrator ausführen" als Rechtsklickoption verfügbar sein.

Syntax für Takeown :

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

takeown Referenz .

Icacls-Syntax :

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]]

icacls Referenz .

chipiik
quelle
1
Seien Sie sich bewusst, dass icacls an langen Pfadnamen erstickt. Die Fehlermeldung "Datei nicht gefunden" ist etwas irreführend. Schlimmer noch, icalcs bricht die Verarbeitung des restlichen Baums ohne Meldung ab. Sie können den Trick verwenden, ein SUBST-Volume tiefer in der Struktur zu erstellen, um dies manchmal zu umgehen. Takeown.exe toleriert lange Namen.
Andrew Dennison
Nicht gültig für Windows XP
Kiquenet
8

Ich weiß, dass dies ein sehr alter Beitrag ist, aber es gibt einen Weg, der in Windows 7 und neuer eingebaut ist (möglicherweise in Windows Vista, aber ich bin mir nicht sicher). Führen Sie Folgendes an einer eskalierten Eingabeaufforderung in dem Ordner aus, den Sie zurücksetzen möchten. /tWeist icaclsan, die Operation rekursiv auszuführen.

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

Der erste Befehl setzt den Besitzer auf den zurück, der über die Umgebungsvariablen angemeldet ist. Natürlich kann stattdessen ein bestimmter Name verwendet werden.

Der zweite Befehl erzwingt dann, dass die Berechtigungen für alle untergeordneten Ordner und Dateien in der Struktur neu vererbt werden.

Hoffe das hilft jemandem in der Zukunft.

Jim
quelle
Der erste Befehl war genug für mich.
Benoit Blanchon
6

Vielleicht möchten Sie einen Blick auf SetACL werfen , das Schweizer Taschenmesser für die Berechtigungsverwaltung. Hier ist ein Beispiel, wie Sie "Administratoren" den Besitz aller Dateien auf Laufwerk C: zuweisen und den Vererbungsschutz für alle untergeordneten Objekte auf einmal entfernen:

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"

Sie können auch hinzufügen -silent.

Helge Klein
quelle
3

In Windows Server 2003 R2 (und höher) können Sie das integrierte Tool icacls.exe verwenden , um den Besitzer über die Befehlszeile zu ändern, sowie alle herkömmlichen cacls.exe-Manipulationen, auf denen es erweitert wird ...

Beachten Sie, dass icacls.exe standardmäßig den Modus "Bearbeiten" verwendet, während cacls.exe standardmäßig den Modus "Ersetzen" verwendet - eine willkommene Änderung für diejenigen von uns, die (mehr als einmal) von dieser kleinen Nuance von cacls gebissen wurden!

jnaab
quelle
icacls ist nett, weil es in neueren Versionen von Windows enthalten ist und es jedem Benutzer erlaubt, den Besitz zuzuweisen.
David
1

Eine andere Alternative ist fileacl. Es ist klein und kann im Gegensatz zu den meisten Windows-Utils das Flag "erben / nicht erben" für das Objekt setzen / deaktivieren .

Skelewir
quelle
0

Ich habe mit Windows Tools eine Lösung gefunden: cacls

cacls <file or directory> /E /T /G <user>:F
chepseskaf
quelle
0
  1. Öffnen Sie die Eingabeaufforderung als Administrator und wechseln Sie in ein problematisches Verzeichnis
  2. Übernehmen Sie den Besitz aller Dateien dort ... Beispiel: takeown /f *.jpg
  3. Erteilen Sie Benutzern Ihrer Wahl Zugriffsrechte ... Beispiel: icacls *.jpg /grant "Everyone":F(Beachten Sie, dass in nicht-englischen Windows "Jeder" möglicherweise nicht vorhanden ist, z. B. in deutschen Windows funktioniert es nur mit "Jeder" - echt bescheuert, dass Windows Befehlsoptionen übersetzt!)
Jörg
quelle