Как я могу предоставить разрешения для пользователя в каталоге (чтение, запись, изменение) с помощью командной строки Windows?
Как предоставить пользователям доступ к каталогу с помощью командной строки в Windows?
Ответ 1
По состоянию на 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
= Container Inherit - этот флаг указывает, что подчиненные контейнеры наследуют этот ACE. -
OI
= Object Inherit - этот флаг указывает, что подчиненные файлы наследуют ACE. -
/T
= Применить рекурсивно к существующим файлам и подпапкам. (OI
иCI
применяются только к новым файлам и подпапкам). Кредит: комментарий от @AlexSpence.
Для полной документации вы можете запустить "icacls
" без аргументов или просмотреть документацию Microsoft здесь и здесь
Ответ 2
Вы также можете использовать ICACLS.
Предоставить группе Пользователи Полный доступ к папке:
>icacls "C:\MyFolder" /grant Users:F
Предоставить разрешение Модифицировать для пользователей IIS для C:\MyFolder
(если вам нужно, чтобы IIS имел возможность R/W файлов в определенную папку):
>icacls "C:\MyFolder" /grant IIS_IUSRS:M
Если вы выполняете ICACLS/?, вы сможете увидеть все доступные параметры.
Ответ 3
Используйте команду cacls
. См. Информацию здесь.
Файлы CACLS/e/p {USERNAME}: {РАЗРЕШЕНИЕ}
Где
/p: установить новое разрешение
/e: Изменить разрешение и сохранить прежнее разрешение, так как это отредактировать ACL вместо его замены.
{USERNAME}: имя пользователя
{РАЗРЕШЕНИЕ}: Разрешение может быть:
R - Чтение
W - Запись
C - Изменить (написать)
F - Полный контроль
Например, выполните управление Rocky Full (F) с помощью следующей команды (введите в командной строке Windows):
C: > Файлы CACLS/e/p rocky: f
Прочтите полную справку, набрав следующую команду:
C: > cacls/?
Ответ 4
Откройте командную строку, затем выполните следующую команду:
icacls "c:\somelocation\of\path" /q /c /t /grant Users:F
F
предоставляет полный доступ.
/q /c /t
применяет разрешения для подпапок.
Примечание. Иногда "Запуск от имени администратора" поможет.
Ответ 5
Я пытаюсь сделать это ниже, и это работает для меня:
1. открыть cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4. del *.* /S /Q
Так что файлы могут стать моим собственным доступом и назначить "Удалить", а затем я могу удалить файлы и папки.
Ответ 6
Поврежденные разрешения: восстановление доступа к папке и ее подобъектам
Хотя большинство ответов, опубликованных в ответ на вопрос, имеют некоторые достоинства, ИМХО ни один из них не дает полного решения. Следующее (может быть) идеальное решение для 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
Примечания:
-
Команда применяется к указанному каталогу.
-
Указание пользователя "Все" устанавливает максимально широкое разрешение, поскольку оно включает каждого возможного пользователя.
-
Параметр "/remove: d" удаляет любые явные настройки DENY, которые могут существовать, так как они переопределяют явные настройки ALLOW: необходимые предварительные условия для создания новой настройки ALLOW. Это всего лишь мера предосторожности, так как часто нет настройки DENY, но лучше, чем потом сожалеть.
-
Параметр "/grant" создает новый параметр ALLOW, явное разрешение, которое заменяет (": r") любые и все явные параметры ALLOW, которые могут существовать.
-
Параметр "F" (т.е. Созданное разрешение) делает это предоставлением полного контроля.
-
Параметр "/T" добавляет рекурсию, применяя эти изменения ко всем текущим подобъектам в указанном каталоге (то есть файлам и подпапкам), а также к самой папке.
-
Параметры "(OI)" и "(CI)" также добавляют рекурсию, применяя эти изменения к подобъектам, созданным впоследствии.
,
ДОБАВЛЕНИЕ (2019/02/10) -
Командная строка Windows 10 выше была любезно предложена мне сегодня, так что вот она. У меня нет Windows 10, чтобы проверить это, но, пожалуйста, попробуйте, если у вас есть (и тогда вы можете оставить комментарий ниже).
Изменение касается только удаления настройки DENY в качестве первого шага. Вполне может быть, что нет ни одного параметра DENY, поэтому этот параметр может не иметь значения. Насколько я понимаю, в Windows 7 вам не нужно указывать пользователя после /удалить: d, но я могу ошибаться!
Ответ 7
Я боролся с этим некоторое время, и только комбинирование ответов в этой теме работало для меня (в Windows 10):
1. Откройте cmd или PowerShell и перейдите в папку с файлами
2. takeown/R/F.
3. icacls */T/grant dan: F
Удачи!
Ответ 8
На всякий случай, если кто-то еще наткнулся на эту страницу, если вы хотите связать различные разрешения вместе в одной команде, я использовал это:
icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)
Обратите внимание на строку csv для различных разрешений.
Ответ 9
С помощью Excel vba script для создания и создания учетных записей. Мне нужно было предоставить полные права доступа к папке и вложенным папкам, которые были созданы с помощью нашей учетной записи "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 - перемещать все подпапки в соответствии с файлами/каталогами.
То, что это дало мне, было папкой на этом сервере, чтобы пользователь мог видеть только эту папку и создавать вложенные папки, чтобы они могли читать и записывать файлы. Также создайте новые папки.
Ответ 10
XCACLS.VBS - очень мощный script, который изменит/отредактирует информацию ACL. c:\windows\system32\cscript.exe. Справка xcacls.vbs возвращает все ключи и параметры.
Вы можете получить официальное распространение от Страница поддержки Microsoft
Ответ 11
Создание и разрешение на создание пакетной папки позволяет мне использовать приведенную ниже powershell script.
Импорт-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, иначе вы получите проблемы с правами.
Ответ 12
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
Ответ 13
отличная точка Călin Darie
У меня было много скриптов для использования cacls, я перемещаю их в icacls как бы я не смог найти script, чтобы изменить пример тома корневого монтирования: d:\datafolder. Я, наконец, упаковал script ниже, который монтирует том в качестве временного диска, а затем применяет сек. затем размонтирует его. Это единственный способ найти обновление безопасности корневого сервера.
1 получает GUID для монтирования папок в файл temp, затем считывает GUID для монтирования тома в качестве временного диска X: применяет секцию и регистрирует изменения, затем отключает том только с диска X: так что смонтированная папка не изменяется или прервали другие, чем применяемые секунды.
вот пример моего script:
**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**
Ответ 14
Я Администратор, а некоторые script помещают "Запретить" разрешение на мое имя для всех файлов и подпапок в каталоге. Выполнение команды icacls "D:\test" /grant John:(OI)(CI)F /T
не сработало, потому что казалось, что он не удалил "Deny" прямо из моего имени из этого списка.
Единственное, что сработало для меня, - это сброс всех разрешений с помощью команды icacls "D:\test" /reset /T
.
Ответ 15
Это то, что сработало для меня:
-
Вручную открыть папку, для которой запрещен доступ.
-
Выберите исполняемый файл/файл приложения в этой папке.
-
Щелкните его правой кнопкой мыши и перейдите к Properties → Compatibility
-
Теперь просмотрите Privilege Level и проверьте его на Run As Administrator
-
Нажмите Change Settings for all users.
Теперь проблема решена.