Как дать разрешение пользователям на каталог с помощью командной строки в Windows? - PullRequest
243 голосов
/ 28 мая 2010

Как я могу предоставить разрешения пользователю для каталога (чтение, запись, изменение) с помощью командной строки Windows?

Ответы [ 15 ]

366 голосов
/ 29 ноября 2011

Начиная с 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 = Object Inherit - этот флаг указывает, что подчиненные файлы будут наследовать ACE.
  • /T = Применять рекурсивно к существующим файлам и подпапкам. (OI и CI применяются только к новым файлам и подпапкам). Кредит: комментарий @ AlexSpence.

Для полной документации вы можете запустить "icacls" без аргументов или посмотреть документацию Microsoft здесь и здесь

70 голосов
/ 20 августа 2012

Вы также можете использовать ICACLS.

Чтобы предоставить пользователям группу полный доступ к папке:

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

Чтобы предоставить Изменить разрешение пользователям IIS для C:\MyFolder (если вам нужен ваш IIS имеет возможность пересылать файлы в определенную папку):

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

Если вы выполните ICACLS /? , вы сможете увидеть все доступные варианты.

19 голосов
/ 01 октября 2015

Откройте командную строку, затем выполните эту команду:

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

F дает полный доступ.

/q /c /t применяет права доступа к подпапкам.

Примечание. Иногда может помочь «Запуск от имени администратора».

19 голосов
/ 28 мая 2010

Используйте команду cacls. Смотри информацию здесь .

Файлы CACLS / e / p {ИМЯ ПОЛЬЗОВАТЕЛЯ}: {РАЗРЕШЕНИЕ}

Где,

/ p: установить новое разрешение

/ e: Редактировать разрешение и сохранить старое разрешение таким, как оно есть, т.е. редактировать ACL вместо его замены.

{USERNAME}: имя пользователя

{РАЗРЕШЕНИЕ}: разрешение может быть:

R - Чтение

W - запись

C - Изменить (записать)

F - Полный контроль

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

C:> CACLS файлы / e / p rocky: f

Прочитайте полную справку, введя следующую команду:

C:> cacls /?

11 голосов
/ 13 июля 2015

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

Так что файлы могут стать моими собственными правами доступа и назначить «Удалить», а затем я могу удалить файлы и папки.

5 голосов
/ 15 декабря 2017

Поврежденные разрешения: восстановление доступа к папке и ее подобъектам

Хотя большинство ответов, опубликованных в ответ на вопрос, имеют определенную ценность, ИМХО ни один из них не дает полного решения. Следующее (может быть) идеальное решение для 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. Опция "/ remove: d" удаляет любые явные настройки DENY, которые могут существовать, так как они переопределяют явные настройки ALLOW: необходимые предварительные условия для создания новой настройки ALLOW. Это всего лишь мера предосторожности, так как часто отсутствует настройка DENY, но она безопаснее, чем извините.

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

  5. Параметр «F» (т. Е. Созданное разрешение) делает это предоставлением полного контроля.

  6. Параметр "/ T" добавляет рекурсию, применяя эти изменения ко всем текущим подобъектам в указанном каталоге (т.е. файлам и подпапках), а также к самой папке.

  7. Параметры "(OI)" и "(CI)" также добавляют рекурсию, применяя эти изменения к подобъектам, созданным впоследствии.
    ,

ADDENDUM (2019/02/10) -

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

Изменение касается только удаления настройки DENY в качестве первого шага. Вполне может быть, что нет ни одного параметра DENY, поэтому этот параметр может не иметь значения. Насколько я понимаю, в Windows 7 вам не нужно указывать пользователя после / remove: d , но я могу ошибаться!

4 голосов
/ 27 декабря 2015

Я боролся с этим некоторое время, и только объединение ответов в этой теме работало для меня (в Windows 10):
1. Откройте cmd или PowerShell и перейдите в папку с файлами
2. забрать / R / F .
3. icacls * / T / Грант Дан: F

Удачи!

3 голосов
/ 23 марта 2015

На всякий случай, если на этой странице есть кто-то еще, если вы хотите объединить различные разрешения в одну команду, я использовал это:

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

Обратите внимание на строку csv для различных разрешений.

2 голосов
/ 23 апреля 2014

С помощью сценария Excel vba для подготовки и создания учетных записей. Мне нужно было предоставить полные права доступа к папке и подпапкам, которые были созданы инструментом, используя учетную запись x нашего администратора, нашему новому пользователю.

cacls выглядел примерно так: cacls \ FileServer \ Users \ Имя пользователя / e / g Домен \ Имя пользователя: C

Мне нужно было перенести этот код в Windows 7 и выше. Мое решение оказалось:

icacls \ FileServer \ Users \ Имя пользователя / грант: r Домен \ Имя пользователя: (OI) (CI) F / t

/ grant: r - Предоставляет указанные права доступа пользователя. Разрешения заменяют ранее предоставленные явные разрешения. Без: r разрешения добавляются к любым ранее предоставленным явным разрешениям

(OI) (CI) - эта папка, подпапки и файлы.

F - полный доступ

/ t - пройти по всем подпапкам, чтобы найти файлы / каталоги.

То, что это дало мне, было папкой на этом сервере, чтобы пользователь мог видеть только эту папку и создавал подпапки, чтобы они могли читать и записывать файлы. А также создавать новые папки.

1 голос
/ 25 мая 2017

Массовое создание папок и предоставление разрешений работает мне с помощью приведенного ниже сценария powershell.

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-файле, в противном случае вы получите проблемы с разрешениями

...