Как предоставить пользователям разрешение на каталог с помощью командной строки в 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
Примечания:
команда применяется к указанному каталогу.
указание пользователя " все " устанавливает максимально широкое разрешение, так как оно включает возможных пользователей.
опция " / удалить: d" удаляет все явные параметры DENY, которые могут существовать, поскольку они переопределяют явные параметры ALLOW: необходимое предварительное создание нового параметра ALLOW.
опция " / grant "создает новый параметр ALLOW, явное разрешение, которое заменяет (": r") любые явные параметры ALLOW, которые могут существовать.
параметр " F " (т. е. созданное разрешение) делает это предоставлением полного контроля.
в "/Т" параметр добавляет рекурсию, применяя эти изменения ко всем настоящее вложенные объекты в указанном каталоге (т. е. файлы и вложенные папки), а также сама папка.
параметры" (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
команда не сработала, потому что казалось, что она не удалила "запретить" прямо из моего имени из этого списка.
единственное, что работал для меня-это сброс всех разрешений с
вот что сработало для меня:
вручную откройте папку, доступ к которой запрещен.
выбрать исполняемый файл приложения в этой папке.
щелкните правой кнопкой мыши на нем и перейдите в свойства ->совместимость
видим Уровень Привилегий и Запуск Администратор!--14-->
нажать на кнопку изменить параметры для всех пользователей.
проблема решена.