Настройка разрешений общего сетевого ресурса в подкаталоге с помощью PowerShell - PullRequest
0 голосов
/ 13 июня 2018

Я хочу настроить сетевой ресурс, предоставляющий права доступа READ только для корневого каталога, но разрешения READ / WRITE для подкаталога в нем.

Я могу сделать это вручную, но хочу иметь возможность сделатьэто с помощью PowerShell.

\\myserver\MyShare           (READ access here for user TESTUSER)
\\myserver\MyShare\subfolder (READ/WRITE access here for user TESTUSER)

Ручные действия в проводнике Windows - откройте диалоговое окно свойств папки, вкладку «Общий доступ», кнопку «Поделиться ...», затем я могу добавить своего пользователя и установить разрешения.Я могу сделать это для ОБА корневого общего ресурса и «подпапки».

Самым близким, что мне удалось сделать в PowerShell, является следующее, которое устанавливает только корень:

New-SmbShare –Name MyShare –Path e:\MyShare -ReadAccess "Domain\TESTUSER"

Однако, похоже, это эквивалентно параметрам «Расширенного общего доступа», которые появляются в диалоговом окне свойств папки, которые применяются только при настройке НОВОГО общего сетевого ресурса, а не к папкам ВНЕ существующего сетевого ресурса.Когда я запускаю этот скрипт, TESTUSER не добавляется в список пользователей в простом диалоговом окне «Поделиться ...», поэтому должен быть другой способ настройки разрешений.

Мой вопрос: Как настроить разрешения с помощью PowerShell таким же образом, как Windows с помощью кнопки «Поделиться ...» в свойствах папки?

Я использую Windows Server 2012 R2.

1 Ответ

0 голосов
/ 13 июня 2018

Разрешения для общего ресурса применяются к общим ресурсам в целом, то есть они влияют на общую папку и все, что в ней содержится.Невозможно применить разные разрешения общего ресурса к подпапке без публикации этой подпапки в качестве другого общего ресурса, и даже в этом случае измененные разрешения вступят в силу только при доступе к подпапке через новый общий ресурс, а не при доступе к ней как подпапке исходного общего ресурса..

Для детального контроля доступа вы ДОЛЖНЫ использовать ACL файловой системы.Однако, если общий ресурс определен как доступный только для чтения через разрешения общего ресурса, пользователю будет отказано в доступе на запись, даже если ACL файловой системы позволят это сделать.

Из-за этих ограничений обычной практикой является установка разрешений для общего ресурса на полный доступ.контролировать всех и делать всю обработку разрешений на уровне файловой системы.Самым простым способом установки ACL для файлов по-прежнему является команда icacls:

icacls C:\path\to\shared_folder /grant "DOMAIN\testuser:(CI)(OI)RX"
icacls C:\path\to\shared_folder\subfolder /grant "DOMAIN\testuser:(CI)(OI)M"

Вы также можете использовать Set-Acl для того же конца, но этопотребуется больше кода:

function New-Ace($user, $permission) {
    New-Object Security.AccessControl.FileSystemAccessRule $user, $permission, 'ContainerInherit, ObjectInherit', 'None', 'Allow'
}

$acl = Get-Acl -LiteralPath 'C:\path\to\shared_folder'
$acl.AddAccessRule((New-Ace 'DOMAIN\testuser' 'ReadOrExecute')
Set-Acl -AclObject $acl -LiteralPath 'C:\path\to\shared_folder'

$acl = Get-Acl -LiteralPath 'C:\path\to\shared_folder\subfolder'
$acl.AddAccessRule((New-Ace 'DOMAIN\testuser' 'Modify'))
Set-Acl -AclObject $acl -LiteralPath 'C:\path\to\shared_folder\subfolder'

Включив перечисление на основе доступа , вы можете быть уверены, что пользователи будут видеть только те папки и файлы, к которым у них есть доступ (избегая путаницы при попыткеполучить доступ к объекту только для того, чтобы получить сообщение об ошибке «отказано в доступе».

...