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

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

15 ответов


по состоянию на Vista,cacls устарела. Вот первые несколько строк справки:

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

Displays or modifies access control lists (ACLs) of files

вы должны использовать . Вот как Ты даруешь Джону полный контроль над D:\test папка и все ее подпапки:

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

согласно документации do MS:

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

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


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

предоставить пользователи группа Полный Контроль в папку:

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

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

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

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


использовать . Смотрите информацию здесь.

cacls files /e / p {USERNAME}: {PERMISSION}

здесь

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

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

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

{PERMISSION}: разрешение может быть:

R - Чтение

W - Запись

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

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

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

C:> cacls files /e / p rocky: f

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

C:> cacls/?


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

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

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

/q /c /t применяет разрешения к вложенным папкам.

Примечание: иногда "Запуск от имени администратора" поможет.


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

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


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

удачи!


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

cacls выглядело примерно так: команды cacls \файловый сервер\Пользователи\Имя пользователя /е /г "домен\Имя_пользователя": с

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

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

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

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

F - Полный Доступ

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

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


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

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

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


хотя большинство ответов, опубликованных в ответе на вопрос, имеют некоторые достоинства, ИМХО ни один из них не дает полного решения. Следующее является идеальным решением:

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

Примечания:

  1. команда применяется к указанному каталогу.

  2. указание пользователя " все " устанавливает максимально широкое разрешение, так как оно включает возможных пользователей.

  3. опция " / удалить: d" удаляет все явные параметры DENY, которые могут существовать, поскольку они переопределяют явные параметры ALLOW: необходимое предварительное создание нового параметра ALLOW.

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

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

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

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


программы xcacls.VBS - очень мощный скрипт, который изменит / отредактирует информацию ACL. c:\windows\system32\cscript.исполняемые программы xcacls.справка vbs возвращает все переключатели и параметры.

вы можете получить официальный дистрибутив от Страница Поддержки Microsoft


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

"Импорт" -CSV-Файла "D:\Scripts\foldernames.csv " / foreach-объект { $имя пользователя._$ = 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-файле, иначе вы получите вопросы разрешения


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

отличная точка Кэлин Дари

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

1 получает GUID монтирования папки во временный файл, а затем считывает GUID для монтирования Тома как временный диск X: применяет sec и регистрирует изменения, затем размонтирует том только с диска X:, чтобы смонтированная папка не изменялась или не прерывалась, кроме примененной sec.

вот пример моего скрипта:

**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**

Я администратор, и какой-то скрипт разместил разрешение "запретить" на мое имя во всех файлах и подпапках в каталоге. Выполнение icacls "D:\test" /grant John:(OI)(CI)F /T команда не сработала, потому что казалось, что она не удалила "запретить" прямо из моего имени из этого списка.

единственное, что работал для меня-это сброс всех разрешений с


вот что сработало для меня:

  1. вручную откройте папку, доступ к которой запрещен.

  2. выбрать исполняемый файл приложения в этой папке.

  3. щелкните правой кнопкой мыши на нем и перейдите в свойства ->совместимость

  4. видим Уровень Привилегий и Запуск Администратор!--14-->

  5. нажать на кнопку изменить параметры для всех пользователей.

проблема решена.