Bez względu na język systemu Windows, jak mogę ustawić polecenie ICACLS tak, aby folder miał pełny dostęp do wszystkich?

9

tło

Powiedz, że mam to polecenie

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

Działa to dobrze w angielskich wersjach systemu Windows, ale wydaje się, że nie działa w wersjach francuskich, dając następujący błąd, prawdopodobnie z powodu Usersróżnicy we francuskim. Everyonezostanie przetłumaczony jak Tout le mondew systemie Windows, więc nie jest to również rozwiązanie.

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

Które Google tłumaczy jako

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

Pytanie

Czy istnieje polecenie, którego mogę użyć, aby ustawić folder i rekursywnie całą jego zawartość, aby mieć pełne uprawnienia dla wszystkich użytkowników w sposób, który działałby w różnych wersjach językowych systemu Windows?

Treści z całej sieci

Ta strona z bardzo podobnym problemem mówi o tym, jak Everyonestaje się Jederpo niemiecku i Tout le mondefrancusku.

Geesh_SO
źródło
2
Wystarczy użyć SID: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F działa wszędzie.
Ben
2
@Ben, powinno być icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F, że pominąłeś gwiazdkę.
Harry Johnston,

Odpowiedzi:

10

Nie działa w wersjach francuskich, prawdopodobnie z powodu Usersróżnic

Masz trzy opcje wyszczególnione poniżej:

  1. Użyj portalu językowego, aby uzyskać przetłumaczoną nazwę

  2. Pobierz zlokalizowaną nazwę z UsersSID

  3. Użyj UsersSID zicacls


Opcja 1: skorzystaj z portalu językowego (kanoniczne źródło terminologii Microsoft)

Wyszukiwanie użytkowników zwraca:

Tłumaczenia w zlokalizowanych produktach Microsoft

    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

Sugeruje to, że następujące polecenie może działać:

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

Opcja 2: Pobierz zlokalizowaną nazwę z UsersSID ( S-1-5-32-545)

SID: S-1-5-32-545

Nazwa: Użytkownicy

Opis: Wbudowana grupa. Po początkowej instalacji systemu operacyjnego jedynym członkiem jest grupa Użytkownicy uwierzytelnieni. Gdy komputer dołącza do domeny, grupa Użytkownicy domeny jest dodawana do grupy Użytkownicy na komputerze.

Źródło Dobrze znane identyfikatory bezpieczeństwa w systemach operacyjnych Windows

Aby pobrać zlokalizowaną Usersnazwę grupy:

Ten prosty skrypt poda rzeczywistą nazwę grupy „Użytkownicy” (S-1-5-32-545)na danym komputerze:

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

Umieść go w pliku z rozszerzeniem vbs (Załóżmy usersName.vbs).

Teraz uruchom:

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

Źródło Cacls, Windows 7, pełne uprawnienia, lokalne nazwy wg WMZ


Opcja 3: użyj UsersSID zicacls

Użyj następującego polecenia:

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

Komentarz źródłowy Harry Johnston

DavidPostill
źródło
Przyjąłem odpowiedź od DavidPostill, ponieważ robi to w wierszu poleceń, co jest świetne, gdy używa się skryptów wsadowych lub PS. W końcu stworzyłem mały plik wykonywalny w języku C #, który po prostu podąża ścieżką i robi dokładnie to, czego potrzebuję. Nie jest tak konfigurowalny jak odpowiedzi tutaj i wymaga .NET Framework, ale bardzo dobrze pasuje do mojego konkretnego celu. Jeśli ktoś jest zainteresowany, oto podstawa kodu C #, z którym skończyłem. stackoverflow.com/a/35461832/1639615
Geesh_SO
xcaclswydaje się być skryptem, który można pobrać. Nie ma potrzeby; icaclsjest wbudowany w system Windows i może wykonywać tę samą pracę.
Harry Johnston,
@HarryJohnston Prawidłowo, ale moja odpowiedź pokazuje, jak odzyskać zlokalizowaną wersję Users... Wyjaśniłem odpowiedź, ponieważ nie potrzebujemy xaclsczęści cytowanego rozwiązania.
DavidPostill
@HarryJohnston Dodałem również korzystanie icaclsbezpośrednio z kredytu.
DavidPostill
7

Musisz podać grupę AD nie według nazwy, ale numeru SID.
W przypadku standardowych grup, takich jak „EveryOne”, „Użytkownicy domeny” itp. Istnieją znormalizowane numery SID, które można znaleźć na stronie MSDN Dobrze znane identyfikatory zabezpieczeń (SID) .

Poniżej przedstawiono najczęstsze identyfikatory względne.

wprowadź opis zdjęcia tutaj

Struktura SID jest opisana następująco:

Składniki identyfikatora SID są łatwiejsze do wizualizacji, gdy identyfikatory SID są konwertowane z formatu binarnego na ciąg znaków przy użyciu standardowej notacji:

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

Na przykład identyfikator SID wbudowanej grupy administratorów jest reprezentowany w znormalizowanej notacji SID jako następujący ciąg:

S-1-5-32-544

Ten identyfikator SID składa się z czterech elementów:

  • Poziom zmiany (1)

  • Wartość uprawnień identyfikatora (5, NT Authority)

  • Identyfikator domeny (32, wbudowany)

  • Względny identyfikator (544, Administratorzy)

Jak działają identyfikatory bezpieczeństwa

Tonny
źródło
Warto zauważyć, że wszyscy użytkownicy są domyślnie częścią grupy użytkowników. Więc jeśli chcesz dać „pełny dostęp: do wszystkich kont użytkowników, po prostu użyj SID S-1-5-32-544, a następnie zmodyfikuj listę ACL, aby nadać grupie wszystkie uprawnienia do danego pliku lub folderu
Ramhound
@Ramhound 544to Administratorzy, 545to Użytkownicy.
DavidPostill
@DavidPostill - Tak; Błąd kopiowania i wklejania.
Ramhound
@Ramhound Znacznie lepiej. To było najlepsze, co mogłem zrobić będąc na telefonie. Dziękuję za edycję.
Tonny
3

Jeśli lubisz skrypty PowerShell, ale masz problem z zapamiętywaniem liczb dla identyfikatorów SID:

$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

Wiem, że wygląda to na mnóstwo pisania, ale te długie identyfikatory są uzupełniane tabulatorami:

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

Wszystkie te ciągi są identyfikatorami .NET, więc nie można ich zlokalizować.

Jeśli Everyonezamiast tego chcesz użyć identyfikatora SID, użyj WorldSidzamiast BuiltinUsersSid. Aby uzyskać listę wszystkich WellKnownSidTypeopcji, zobacz MSDN lub uruchom to polecenie:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name
Ben N.
źródło
FileSystemAccessRule bez Sid i za pomocą group names?
Kiquenet,
@Kiquenet Nie jestem do końca pewien, o co pytasz, ale jeśli wolisz podać nazwę grupy czytelną dla człowieka, nie będzie ona już niezależna od języka. Jeśli nie masz nic przeciwko, możesz usunąć $sid =linię i zastąpić $sidw $rule =niej łańcuchem identyfikującym grupę.
Ben N