Як надати дозволу користувачам на каталог за допомогою командного рядка в Windows?


Відповіді:


419

Станом на Vista, caclsзастаріла. Ось перша пара довідок:

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

Ви повинні використовувати icaclsзамість цього. Ось як ви надаєте Джону повний контроль над D:\testпапкою та всіма її папками:

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

Відповідно до документації MS:

  • F = Повний контроль
  • CI = Контейнерна спадщина - Цей прапор вказує, що підлеглі контейнери успадкують цей ACE.
  • OI = Об'єктна спадщина - Цей прапор вказує, що підлеглі файли успадкують ACE.
  • /T= Застосовувати рекурсивно до існуючих файлів і підпапок. ( OIі CIстосується лише нових файлів і підпапок). Кредит: коментар @AlexSpence

Для повної документації ви можете " icacls" працювати без аргументів або бачити документацію Microsoft тут і тут


4
Феліпе: Параметри (OI) та (CI) роблять це рекурсивним
Кріс Міллер

22
У мене виникли проблеми з доступом, відмовлені в спробі змінити дозволи в інтерфейсі Windows Explorer. Додавання прапора / T до кінця замінило існуючі об’єкти і змогло вирішити проблему для мене. C:> icacls "D: \ test" / grant John: (OI) (CI) F / T
Alex Spence

9
@AlexSpence Чудова точка! / T необхідно оновити дозволу існуючих файлів і папок . (OI) та (CI) стосується лише файлів і папок, створених у майбутньому.
Джессі

5
Походить із світу * nix і використовується для 'chown / chmod' для надання доступу та встановлення дозволів через CLI, ця тема була дуже корисною.
bgarlock

5
Якщо запустити це в Powershell в Windows 10, ви отримаєте помилку про "OI не розпізнано". Рішення: Введіть аргумент користувача + perms у лапки. Наприклад:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS

78

Ви також можете використовувати ICACLS.

Щоб надати Групі користувачів повний контроль папці:

>icacls "C:\MyFolder" /grant Users:F

Щоб надати Модифікація дозволу користувачам IIS для C:\MyFolder(якщо вам потрібен, ваш IIS має можливість R / W файлів у певну папку):

>icacls "C:\MyFolder" /grant IIS_IUSRS:M

Якщо ви робите ICACLS /? ви зможете побачити всі доступні варіанти.


А враховуючи, що caclsцього немає, це ще більше причин використовувати icacls .
Ян Бойд

2
Додавання повного контролю не працювало для мене, поки не /grant Users:(OI)(CI)Fвикористовувався
Jan Zahradník

Чи потрібно мені замінити Usersчимось іншим чи НІ? Згідноicacls "C:\MyFolder" /grant Users:F
іорі

Якщо поточний користувач є членом групи користувачів під назвою "Користувачі" (що, як правило, в Windows 7), то надання дозволу цій групі вплине на права доступу поточного користувача. У будь-якому іншому випадку замініть ім’я Користувачі фактичним іменем поточного користувача (наприклад, Джон), таким чином: / надайте Джон: (OI) (CI) F
Ed999

24

Відкрийте командний рядок і виконайте цю команду:

icacls "c:\somelocation\of\path" /q /c /t /grant Users:F

F надає повний доступ.

/q /c /t застосовує дозволи до підпапок.

Примітка. Іноді допоможе "Запустити як адміністратор".


"Запустити як адміністратора" потрібен, просто найкраща відповідь!
Jeb50

20

Використовувати caclsкоманду. Інформацію дивіться тут .

Файли CACLS / e / p {USERNAME}: {PERMISSION}

Де,

/ p: Встановити новий дозвіл

/ e: Редагування дозволу та збереження старого дозволу, оскільки воно є, тобто редагування ACL замість заміни.

{USERNAME}: Ім'я користувача

{ДОКУМЕНТ}: Дозвіл може бути:

R - Прочитайте

W - Пишіть

C - Змінити (написати)

F - Повний контроль

Наприклад, надайте управління Rocky Full (F) за допомогою наступної команди (введіть у командному рядку Windows):

C:> Файли CACLS / e / p rocky: f

Прочитайте повну допомогу, набравши наступну команду:

C:> cacls /?


Чудова відповідь! Зазначимо лише, що файли - це фактичні файли, на які потрібно змінити дозволи. Можливо, [файли] або {файли} будуть кращим поясненням.
Коннор Росс

14
Cacls застаріло!
Hardik Thaker

caclsактуально; він по - , як і раніше доступний в Windows 10; Microsoft також знехтувала cmd.exeна користь Powershell.

1
@ Chinggis6 Бути "все ще доступним" не означає, що щось добре використовувати або рекомендувати іншим використовувати. Крім того, cmd.exeне є застарілим і, швидше за все, не буде, тому це зовсім не на користь icacls, а навпаки.
підкреслюй_

1
Я знаю. Я не заявляв, чи корисно це використовувати або рекомендувати cacls.exe. Ні я не згадував, що cmd.exeвже застаріло. Я думаю, що люди повинні, принаймні, усвідомлювати його доступність у вищих версіях, навіть тільки для зворотної сумісності або будь-якої іншої причини.

12

Я пробую наступний спосіб, і він працює для мене:
1. відкрити cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4.del *.* /S /Q

Так що файли можуть стати моїм власним доступом, і він призначить "Видалити", а потім я можу видалити файли та папки.


7

Пошкоджені дозволи: відновлення доступу до папки та її підметів

Хоча більшість відповідей, розміщених у відповіді на запитання, мають певні заслуги, жодна з них не дає повноцінного рішення. Наступне (можливо,) ідеальне рішення для Windows 7, якщо ви заблоковані з папки пошкодженими налаштуваннями дозволу:

icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T  

Для Windows 10 користувач / SID повинен бути вказаний після /remove:dпараметра:

icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T  

.
Примітки :

  1. Команда застосовується до вказаного каталогу.

  2. Вказавши користувача "Усі" встановлює максимально широкий дозвіл, оскільки він включає кожного можливого користувача.

  3. Опція "/ delete: d" видаляє будь-які явні параметри DENY, які можуть існувати, оскільки вони перекривають явні налаштування ALLOW: необхідний попередній для створення нового параметра ALLOW. Це лише обережність, оскільки часто немає ДЕНІ налаштувань, але краще безпечно, ніж шкода.

  4. Параметр "/ grant" створює нове налаштування ALLOW, явний дозвіл, який замінює (": r") будь-які та всі явні установки ALLOW, які можуть існувати.

  5. Параметр "F" (тобто створений дозвіл) робить це дозволом FULL управління.

  6. Параметр "/ T" додає рекурсію, застосовуючи ці зміни до всіх поточних суб'єктів у вказаному каталозі (тобто файлах і папках), а також до самої папки.

  7. Параметри "(OI)" і "(CI)" також додають рекурсію, застосовуючи ці зміни до створених згодом суб'єктів.
    .

ДОДАТОК (2019/02/10) -

Командний рядок Windows 10 вище мені було ласкаво запропоновано сьогодні, ось ось воно. У мене немає Windows 10 для тестування, але будь ласка, спробуйте, якщо у вас є (і тоді ви, будь ласка, опублікуйте коментар нижче).

Ця зміна стосується лише видалення параметра DENY як першого кроку. Можливо, немає ніяких налаштувань DENY, тому ця опція може не мати ніякого значення. Наскільки я розумію, в Windows 7, що вам не потрібно вказувати користувача після / видалення: d але я можу помилитися з цього приводу!

.

ДОБАВЛЕННЯ (2019/11/21) -

Користувач astark рекомендує замінити кожному термін * S-1-1-0, щоб команда була незалежною від мови. У мене є лише англійська версія Windows, тому я не можу перевірити цю пропозицію, але це здається розумним.


Немає необхідних положень щодо ДОСЛІДЖЕНОГО дозволу, оскільки дозволи EXPLICIT перевершують їх. Отже, створення нового явного параметра анулює будь-які успадковані параметри, які можуть існувати (тому що новий явний параметр включає рекурсію).
Ed999

Invalid parameter "/remove:d"
DFSFOT

Я запускаю (можна лише запустити) icacls.exe в Windows 7. Я не можу коментувати і не перевіряти будь-які зміни до нього, які можуть існувати в Windows 8 або 10. Як перевірено мною в 64-бітному Windows 7, видалити опція ефективна для видалення параметрів DENY. Її використання може призвести до повідомлення про помилку, якщо немає налаштувань відмови у відсутності, але якщо таких немає, то їх все одно неможливо видалити.
Ed999

Якщо точно відтворити командний рядок у моїй оригінальній відповіді (зберегти для шляху до каталогу), це призведе до відмови команди. Зокрема, НЕ додайте жодних лапок, які не містять моєї відповіді. Якщо ви введете (наприклад) параметр / delete: d у лапки, команда, звичайно, не вдасться.
Ed999

1
@DFSFOT Ну, я співчуваю. Але я використовую Windows 7. З ласки Божої я ніколи не користуюся Windows 10. Я б швидше перейшов на Ubuntu! Я підозрюю, що / delete: g, ймовірно, видалить усі права, як записи ALLOW, так і DENY (хоча з можливістю, що "наданий" у цьому контексті означає лише ALLOW, тому він не буде обробляти будь-які записи DENY); в той час як / видалити: д імовірно тільки видалити заперечує записи, в результаті чого будь-який ALLOW записи без змін. Але я, звичайно, не можу бути впевнений.
Ed999

5

Я боровся з цим на деякий час і тільки комбінуючи відповіді в цій темі працював для мене (на Windows 10):
1. Відкрийте CMD або PowerShell і перейдіть в папку з файлами
2. takeown / R / F .
3. icacls * / T / grant dan: F

Удачі!


3

На всякий випадок, якщо на цій сторінці хтось інший натикається, якщо ви хочете з'єднати різні дозволи разом в одній команді, я використав це:

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

Зверніть увагу на рядок csv для різних дозволів.


Дуже дякую. Це допомогло мені встановити дозвіл на RX & RD. У більшості прикладів, наведених в Інтернеті, було пояснено з / F повним дозволом, що не повинно бути так.
Mani

2

За допомогою сценарію Excel vba для забезпечення та створення облікових записів. Мені потрібно було надати повні права на папки та підпапки, створені інструментом за допомогою x-акаунта адміністраторів нашого нового користувача.

cacls виглядав приблизно так: cacls \ FileServer \ Користувачі \ Ім'я користувача / e / g Домен \ Ім'я користувача: C

Мені потрібно було перенести цей код на Windows 7 і вище. Моє рішення виявилося таким:

icacls \ FileServer \ Користувачі \ Ім'я користувача / грант: r Домен \ Ім'я користувача: (OI) (CI) F / t

/ grant: r - надає вказані права доступу користувача. Дозволи дозволяють замінити раніше надані явні дозволи. Без: r, дозволи додаються до будь-яких раніше наданих явних дозволів

(OI) (CI) - ця папка, підпапки та файли.

F - Повний доступ

/ t - Перемістіть усі підпапки для відповідності файлів / каталогів.

Це дало мені папку на цьому сервері, що користувач міг бачити лише цю папку і створював підпапки, щоб вони могли читати та писати файли. А також створити нові папки.


1

XCACLS.VBS - це дуже потужний сценарій, який буде змінювати / редагувати інформацію про ACL. c: \ windows \ system32 \ cscript.exe xcacls.vbs допоможе повернути всі комутатори та параметри.

Офіційний розподіл можна отримати на сторінці підтримки Microsoft


3
Чи можете ви надати довідку, де XCACLS.VBSїї можна знайти?
Jeremy J Starcher

1

Створення масових папок та надання дозволу працює на мене, використовуючи наведений нижче сценарій повноважень.

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
    $username = $_.foldername 

    # foldername is the header of csv file

    $domain = “example.com”

    $folder= "D:\Users"

    $domainusername = $domain+“\”+$username

    New-Item $folder\$username –Type Directory

    Get-Acl $folder\$username  

    $acl = Get-Acl $folder\$username

    $acl.SetAccessRuleProtection($True, $False)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    Set-Acl $folder\$username $acl
}

Примітка. Вам потрібно створити те саме ім’я користувача домену у файлі csv, інакше ви отримаєте проблеми з дозволом


0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide

2
Це атрибути файлу (лише для читання, архіву, системи, прихованого), а не дозволи, пов’язані з обліковими записами користувачів.
Робін Беннетт

0

чудовий момент Călin Darie

У мене було багато сценаріїв для використання cacls, я переміщу їх у icacls, тому що коли-небудь я не міг знайти скрипт для зміни прикладу томів кореневого кріплення: d: \ datafolder. Нарешті я розробив сценарій нижче, який встановлює гучність як тимчасовий диск, а потім застосовує sec. потім відключає його. Це єдиний спосіб, коли я виявив, що ви можете оновити захист кореневого монтажу.

1 отримує GUID кріплення папки до тимчасового файлу, потім читає GUID для монтажу гучності як темп-накопичувача X: застосовує sec та реєструє зміни, після чого відключає гучність лише з диска X: так що змонтована папка не змінюється і не переривається інше потім застосовується сек.

ось зразок мого сценарію:

**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I 
D:\tools\security\icacls.exe  %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**

0

Я адміністратор, і якийсь сценарій розмістив дозвіл "Заборонити" на моє ім'я для всіх файлів і папок у каталозі. Виконанняicacls "D:\test" /grant John:(OI)(CI)F /T команди не спрацювало, тому що, здавалося, вона не видалила "Заборонити" прямо з мого імені зі цього списку.

Єдине, що працювало для мене, - це скидання всіх дозволів за допомогою icacls "D:\test" /reset /Tкоманди.


Подолати проблему можна без використання команди скидання, вказавши '' / delete: d '' для видалення явних параметрів DENY, які можуть існувати - див. Моє ідеальне рішення (вище).
Ed999

-1

у Windows 10, що працюють без "c:>" та ">"

Наприклад:

F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission

cacls "шлях до файлу чи папки" / e / p UserName: F

(також це виправляє помилки 2502 та 2503)

cacls "C: \ Windows \ Temp" / e / p UserName: F


-5

Це для мене працювало:

  1. Вручну відкрийте папку, до якої заборонено доступ.

  2. Виберіть виконуваний файл / файл програми у цій папці.

  3. Клацніть по ньому правою кнопкою миші та перейдіть до Properties->Compatibility

  4. Тепер подивіться Privilege Levelта перевірте цеRun As Administrator

  5. Натисніть на Change Settings for all users.

Проблема вирішена зараз.


Питання полягає у виконанні вищезазначеного через командний рядок. Хоча ваша пропозиція може спрацювати добре, вона не застосовується, якщо у вас є лише термінальний доступ (ssh) до сервера, який потрібно налаштувати, таким чином вам потрібно буде використовувати сценарій cmd
Івайло Славов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.