Незалежно від мови Windows, як я можу змусити команду ICACLS встановити папку, щоб мати повний доступ для всіх?


8

Фон

Скажіть, я маю цю команду

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

Це добре працює в англійських версіях Windows, але, схоже, не працює у французьких версіях, що дає наступну помилку, імовірно, через Usersте, що вона відрізняється французькою. Everyoneотримує переклад, як Tout le mondeу Windows, тому це теж не є рішенням.

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

Що Google перекладає як

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

Питання

Чи є команда, яку я можу використовувати для встановлення папки та рекурсивно всього її вмісту, щоб мати повні дозволи для всіх користувачів таким чином, щоб це працювало в різних мовних версіях Windows?

Вміст із Інтернету

Ця сторінка з багато в чому подібною проблемою розповідає про те, як Everyoneстає Jederнімецькою та Tout le mondeфранцузькою мовами.


2
Просто використовуйте SID: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F працює скрізь.
Бен

2
@Ben, так і повинно icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F, ви залишили зірочку.
Гаррі Джонстон

Відповіді:


10

Не працює у французьких версіях, імовірно, через Usersіншу

У вас є три варіанти, детально описані нижче:

  1. Використовуйте мовний портал, щоб отримати перекладене ім’я

  2. Отримайте локальне ім’я з UsersSID

  3. Використовуйте UsersSID за допомогоюicacls


Варіант 1: Використовуйте мовний портал (канонічний ресурс для Microsoft Terminology)

Пошук користувачів повертається:

Переклади в Локалізовані продукти 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

Це дозволяє зробити наступну команду:

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

Варіант 2: Отримання локалізованого імені з UsersSID ( S-1-5-32-545)

СІД: S-1-5-32-545

Ім'я: Користувачі

Опис: Вбудована група. Після первинної установки операційної системи єдиним членом є група Аутентифіковані користувачі. Коли комп'ютер приєднується до домену, група користувачів користувачів домену додається до групи Користувачі на комп'ютері.

Джерело Відомі ідентифікатори безпеки в операційних системах Windows

Щоб отримати ім’я локалізованої Usersгрупи:

Цей простий сценарій дасть вам фактичну назву групи "Користувачі" (S-1-5-32-545)на даному ПК:

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

Помістіть його у файл з розширенням vbs (Припустимо usersName.vbs).

Тепер запустіть:

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

Джерело Cacls, Windows 7, повні дозволи, локальні назви від wmz


Варіант 3: Використовуйте UsersSID за допомогоюicacls

Використовуйте таку команду:

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

Коментар джерела Гаррі Джонстон


Я прийняв відповідь від DavidPostill, оскільки це робиться справжнім способом командного рядка, що чудово під час використання пакетних чи PS-скриптів. Зрештою, я фактично створив невеликий виконуваний файл у C #, який просто бере шлях і робить саме те, що мені потрібно. Це не так налаштовується, як відповіді тут, і для цього потрібна .NET Framework, але це дуже добре відповідає моїй конкретній цілі. Якщо хтось зацікавлений, ось основа C # коду, з яким я закінчився. stackoverflow.com/a/35461832/1639615
Geesh_SO

xcaclsвиявляється сценарій, який ви можете завантажити. Немає потреби; icaclsвбудований у Windows і може виконувати ту саму роботу.
Гаррі Джонстон

@HarryJohnston Правильно, але моя відповідь показує, як отримати локалізовану версію Users... Я уточнив відповідь, оскільки нам не потрібна xaclsчастина цитованого рішення.
DavidPostill

@HarryJohnston Я також додав, використовуючи icaclsбезпосередньо вам кредит.
DavidPostill

7

Необхідно вказати групу AD не за її назвою, а за номером SID.
Для стандартних груп, таких як "EveryOne", "Users Domain" тощо, є стандартизовані номери SID, які можна знайти на сторінці MSDN Добре відомі ідентифікатори безпеки (SID) .

Нижче наведені найбільш поширені відносні ідентифікатори.

введіть тут опис зображення

Структура SID описується наступним чином:

Компоненти SID легше візуалізувати, коли SID перетворюються з бінарного в рядковий формат, використовуючи стандартні позначення:

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

Наприклад, SID для вбудованої групи адміністраторів представлений у стандартизованих позначеннях SID як наступна рядок:

S-1-5-32-544

Цей SID має чотири компоненти:

  • Рівень перегляду (1)

  • Значення повноважень ідентифікатора (5, NT Authority)

  • Ідентифікатор домену (32, вбудований)

  • Відносний ідентифікатор (544, Адміністратори)

Як працюють ідентифікатори безпеки


Варто зазначити, що всі користувачі за замовчуванням входять до групи користувачів. Тож якщо ви хочете надати "повний доступ: до всіх облікових записів користувачів, просто скористайтеся SID S-1-5-32-544, а потім змініть ACL, щоб надати всі дозволи групі для відповідного файлу чи папки
Ramhound

@Ramhound 544- Адміністратори, 545Користувачі.
DavidPostill

@DavidPostill - Так; Помилка копіювання та вставки
Рамхаунд

@Ramhound Набагато краще. Це було найкраще, що я міг зробити, перебуваючи по телефону. Дякуємо за редагування
Тонні

3

Якщо вам подобаються сценарії PowerShell, але у вас є проблеми з запам'ятовуванням номерів для 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

Я знаю, це виглядає як тон набору тексту, але ці довгі ідентифікатори заповнені вкладками:

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

Усі ці рядки є ідентифікаторами .NET, тому вони не локалізуються.

Якщо ви хочете Everyoneзамість цього SID, використовуйте WorldSidзамість BuiltinUsersSid. Щоб отримати список усіх WellKnownSidTypeпараметрів, див. MSDN або запустіть цю команду:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name

FileSystemAccessRule без Sid та використання group names?
Кікенет

@Kiquenet Я не зовсім впевнений, що ви запитуєте, але якщо ви віддасте перевагу вказувати читабельну людину назву, це більше не буде незалежно від мови. Якщо з вами все в порядку, ви можете видалити $sid =рядок і замінити $sidв $rule =рядку рядок, що ідентифікує групу.
Бен N
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.