Как предоставить пользователям доступ к каталогу с помощью командной строки в 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  


Примечания:

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

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

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

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

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

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

  7. Параметры "(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

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

  • Вручную открыть папку, для которой запрещен доступ.

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

  • Щелкните его правой кнопкой мыши и перейдите к PropertiesCompatibility

  • Теперь просмотрите Privilege Level и проверьте его на Run As Administrator

  • Нажмите Change Settings for all users.

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