Wie kann ich unabhängig von der Windows-Sprache den ICACLS-Befehl so einstellen, dass ein Ordner für alle Benutzer uneingeschränkt zugänglich ist?

9

Hintergrund

Angenommen, ich habe diesen Befehl

icacls C:\FullyAccessibleFolder /grant Users:(OI)(CI)F

Dies funktioniert in englischen Windows-Versionen einwandfrei, scheint jedoch in französischen Versionen nicht zu funktionieren. Dies führt zu dem folgenden Fehler, vermutlich weil Userses in Französisch anders ist. Everyonewird wie Tout le mondein Windows übersetzt, das ist also auch keine Lösung.

Users: Le mappage entre les noms de compte et les ID de sécurité n'a pas été effectué.

Welches Google übersetzt als

Users: The mapping between account names and security IDs was not performed.

Frage

Gibt es einen Befehl, mit dem ich einen Ordner und rekursiv den gesamten Inhalt so einstellen kann, dass alle Benutzer über vollständige Berechtigungen verfügen, die für verschiedene Sprachversionen von Windows geeignet sind?

Inhalte aus dem Internet

Diese Seite mit einem weitgehend ähnlichen Problem spricht darüber , wie Everyonewird Jederin Deutsch und Tout le mondein Französisch.

Geesh_SO
quelle
2
Verwenden Sie einfach die SID: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F Funktioniert überall.
Ben
2
@ Ben, das sollte sein icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F, du hast das Sternchen weggelassen .
Harry Johnston

Antworten:

10

Funktioniert nicht in französischen Versionen, vermutlich weil Userses anders ist

Sie haben drei Möglichkeiten, die im Folgenden beschrieben werden:

  1. Verwenden Sie das Sprachportal verwenden , um den übersetzten Namen abzurufen

  2. Rufen Sie den lokalisierten Namen von der UsersSID ab

  3. Verwenden Sie die UsersSID miticacls


Option 1: Verwenden Sie das Sprachportal (kanonische Ressource für Microsoft Terminology).

Eine Suche nach Benutzern gibt Folgendes zurück:

Übersetzungen in lokalisierten Microsoft-Produkten

    English Translation         Product
    Users   Utilisateurs        Windows 7
    Users   des utilisateurs    Windows 7
    Users   Utilisateurs        Windows 8 Modern Voice
    Users   Utilisateurs        Windows 8
    Users   Utilisateurs        Windows 8.1
    USERS   UTILISATEURS        Windows 8.1
    Users   Utilisateurs        Windows 10
    Users   des utilisateurs    Windows 10
    Users   Utilisateurs        Windows 10 Anniversary Update
    users   utilisateurs        Windows 10 Anniversary Update

Dies deutet darauf hin, dass der folgende Befehl möglicherweise funktioniert:

icacls C:\FullyAccessibleFolder /grant Utilisateurs:(OI)(CI)F

Option 2: Rufen Sie den lokalisierten Namen von der UsersSID ab ( S-1-5-32-545)

SID: S-1-5-32-545

Name: Benutzer

Beschreibung: Eine integrierte Gruppe. Nach der Erstinstallation des Betriebssystems ist das einzige Mitglied die Gruppe Authentifizierte Benutzer. Wenn ein Computer einer Domäne beitritt, wird die Gruppe Domänenbenutzer der Gruppe Benutzer auf dem Computer hinzugefügt.

Quelle Bekannte Sicherheitskennungen in Windows-Betriebssystemen

So rufen Sie den lokalisierten UsersGruppennamen ab:

Dieses einfache Skript gibt Ihnen den tatsächlichen Namen der Benutzergruppe (S-1-5-32-545)auf einem bestimmten PC:

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-32-545'")
    Wscript.Echo objAccount.AccountName

Fügen Sie es in eine Datei mit der Erweiterung vbs ein (nehmen wir an usersName.vbs).

Führen Sie jetzt aus:

echo Y|for /f "delims=" %i in ('cscript -Nologo usersName.vbs') do cacls foldername /G "%i":F

Quell- Cacls, Windows 7, vollständige Berechtigungen, lokale Namen von wmz


Option 3: Verwenden Sie die UsersSID miticacls

Verwenden Sie den folgenden Befehl:

icacls C:\FullyAccessibleFolder /grant *S-1-5-32-545:(OI)(CI)F

Quellenkommentar von Harry Johnston

DavidPostill
quelle
Ich habe die Antwort von DavidPostill akzeptiert, da sie in einer echten Befehlszeilenweise ausgeführt wird. Dies ist ideal, wenn Batch- oder PS-Skripte verwendet werden. Am Ende habe ich tatsächlich eine kleine ausführbare Datei in C # erstellt, die nur einen Pfad nimmt und genau das tut, was ich brauche. Es ist nicht so anpassbar wie die Antworten hier und erfordert .NET Framework, aber es passt sehr gut zu meinem speziellen Zweck. Wenn jemand interessiert ist, ist hier die Basis des C # -Codes, mit dem ich am Ende angefangen habe. stackoverflow.com/a/35461832/1639615
Geesh_SO
xcaclsscheint ein Skript zu sein, das Sie herunterladen können. Es ist nicht nötig; icaclsist in Windows integriert und kann den gleichen Job machen.
Harry Johnston
@HarryJohnston Richtig, aber meine Antwort zeigt, wie die lokalisierte Version von Users... abgerufen werden kann. Ich habe die Antwort geklärt, da wir den xaclsTeil der angegebenen Lösung nicht benötigen .
DavidPostill
@ HarryJohnston Ich habe auch hinzugefügt, icaclsdirekt mit Kredit zu Ihnen zu verwenden.
DavidPostill
7

Sie müssen die AD-Gruppe nicht anhand ihres Namens, sondern anhand der SID-Nummer angeben.
Für Standardgruppen wie "EveryOne", "Domain Users" usw. gibt es standardisierte SID-Nummern, die auf der MSDN-Seite Bekannte Sicherheitskennungen (SIDs) zu finden sind .

Das Folgende sind die häufigsten relativen Bezeichner.

Geben Sie hier die Bildbeschreibung ein

Die Struktur einer SID wird wie folgt beschrieben:

Die Komponenten einer SID sind einfacher zu visualisieren, wenn SIDs mithilfe der Standardnotation vom Binär- in das Zeichenfolgenformat konvertiert werden:

SRX-Y1-Y2-Yn-1-Yn

    Component                   Definition

    S                         Indicates that the string is a SID
    R                         Revision level
    X                         Identifier authority value
    Y            A series of subauthority values, where n is the number of values

Beispielsweise wird die SID für die integrierte Administratorgruppe in standardisierter SID-Notation als folgende Zeichenfolge dargestellt:

S-1-5-32-544

Diese SID besteht aus vier Komponenten:

  • Ein Revisionsstand (1)

  • Ein Identifizierungsberechtigungswert (5, NT-Berechtigung)

  • Eine Domain-ID (32, Builtin)

  • Eine relative Kennung (544, Administratoren)

Funktionsweise von Sicherheitskennungen

Tonny
quelle
Es ist darauf hinzuweisen, dass alle Benutzer standardmäßig Teil der Benutzergruppe sind. Wenn Sie also "vollen Zugriff: auf alle Benutzerkonten gewähren möchten, verwenden Sie einfach die SID S-1-5-32-544und ändern Sie dann die ACL, um der Gruppe alle Berechtigungen für die
betreffende
@ Ramhound 544ist Administratoren, 545ist Benutzer.
DavidPostill
@ DavidPostill - Ja; Fehler beim Kopieren und Einfügen.
Ramhound
@ Ramhound Viel besser. Es war das Beste, was ich tun konnte, während ich telefonierte. Danke für die Bearbeitung.
Tonny
3

Wenn Sie PowerShell-Skripte mögen, aber Probleme haben, sich Zahlen für SIDs zu merken:

$acl = Get-Acl .\myfolder
$sid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::BuiltinUsersSid, $null)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($sid, 'FullControl', 'ObjectInherit,ContainerInherit', 'None', 'Allow')
$acl.AddAccessRule($rule)
Set-Acl .\myfolder $acl

Ich weiß, das sieht nach einer Menge Tippen aus, aber diese langen Bezeichner sind mit Tabulatoren versehen:

  • System.Security.Principal.SecurityIdentifier von securityi
  • System.Security.Principal.WellKnownSidType von wellknownsi
  • System.Security.AccessControl.FileSystemAccessRule von filesystem

Alle diese Zeichenfolgen sind .NET-Bezeichner, sodass sie nicht lokalisiert werden.

Wenn Sie Everyonestattdessen die SID möchten , verwenden Sie WorldSidanstelle von BuiltinUsersSid. Eine Liste aller WellKnownSidTypeOptionen finden Sie unter MSDN oder führen Sie diesen Befehl aus:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name
Ben N.
quelle
FileSystemAccessRule ohne Sid und mit group names?
Kiquenet
@Kiquenet Ich bin mir nicht ganz sicher, was Sie fragen, aber wenn Sie lieber einen für Menschen lesbaren Gruppennamen angeben möchten, ist dieser nicht mehr sprachunabhängig. Wenn Sie damit einverstanden sind, können Sie die $sid =Zeile entfernen und $sidin der $rule =Zeile durch eine Zeichenfolge ersetzen , die die Gruppe identifiziert.
Ben N