Назад | Перейти на главную страницу

разрешения на домашний каталог 2008 R2

У меня есть файловый сервер Windows 2008 R2. Он настроен таким образом, что пользователи получают домашний диск, сопоставленный с ним H :. Он находится в следующем месте \\servername\home\%username%

У меня были проблемы с тем, что пользователи Mac могли видеть домашние диски других пользователей (даже с включенным перечислением).

Мне нужно изменить разрешения для каталога и всех подкаталогов пользователей. Есть ли простой способ сделать это оптом их более тысячи.

Я смотрел Set-Acl http://helgeklein.com/setacl/examples/managing-file-system-permissions-with-setacl-exe/ однако я не вижу, как он будет делать все домашние диски пользователей, которые уже существуют. Если кто-то знает хороший инструмент, это было бы здорово.

Я хочу применить следующие разрешения к папке% username%

SYSTEM - Full control
local\Users special list and read attributes
local\administrators - Full control
%username% = modify

Спасибо

Этот сценарий я использовал в win 2008 для сброса безопасности пользователя в каталоге e: \ users. Он сбрасывает право собственности на правильного владельца и устанавливает стандартный профиль безопасности. Он использует встроенную утилиту и icacls, которые поставляются с 2008, поэтому никаких внешних инструментов не требуется.

Предполагается, что имена пользователей и имена каталогов совпадают. то есть e: \ users \ j.doe принадлежит mydomain \ j.doe

Если вы передадите ему такой параметр, как j.doe, он только «исправит» этот каталог, чтобы вы могли протестировать его в одном каталоге. Перед использованием в реальном времени проверьте, какие разрешения безопасности вам нужны. Я использовал это, чтобы исправить ситуацию после миграции, когда я копировал файлы в скриптах.

@echo off
setlocal enabledelayedexpansion
set mydom=mydomainname
set domadmins=%mydom%\Domain Admins
set domadmin=%mydom%\administrator


for /d %%A in (e:\users\%1*) do (
        echo %%~nA%%~xA         %%A

        echo.
        echo takeown
        takeown /f %%A /r /d y

        echo.
        echo reset security
        icacls %%A\*.* /reset /t

        echo.
        echo reset user access
        icacls %%A\*.* /grant:r "%mydom%\%%~nA%%~xA:(oi)(ci)F"

        echo.
        echo Add domainadmins
        icacls %%A\*.* /grant:r "%domadmins%:(oi)(ci)f" /grant:r "%mydom%\%%~nA%%~xA:(oi)(ci)F" /grant:r "%domadmin%:(oi)(ci)f" /grant:r "SYSTEM:(OI)(CI)F" /t /c

        rem echo.
        rem echo add user full access
        rem icacls %%A /grant:r "%mydom%\%%~nA%%~xA:(oi)(ci)F" /t /c
        icacls %%A\*.* /inheiritance:r

        echo.
        echo reset user ownership
        @echo on
        icacls %%A\*.* /setowner %mydom%\%%~nA%%~xA /t /c
        @echo off)

echo finished

При публикации я внес некоторые незначительные изменения, поэтому может быть синтаксическая ошибка.

Или, если вы предпочитаете PowerShell, один из моих технических специалистов написал это, и это хорошо сработало для нас. Я уверен, что он может кое-что очистить, но я оставил некоторые тестовые строки, чтобы упростить игру и настройку. Это использует Инструменты квеста который вам больше не нужен, особенно если вы используете PowerShell v2 и SubInACL:

cls
#Add-PSSnapin quest*
#$dirlist = gci -name c:\test -Exclude *.* | sort #my original


$dirlist = gci \\servername\sharename -Exclude *.* | ? { $_.PSIsContainer }

$subinacl = "C:\utils\subinacl.exe"
foreach ($userdir in $dirlist)
        {
            $username = $userdir.name
            $adaccount = Get-QADUser $username
            #Verifies user is an active employee, renamed folder to be deleted if not
            If (($adaccount.AccountIsDisabled -eq $TRUE) -or (!$adaccount))
                {
                    write-host "$username is not a current employee"
                    #takeownership
                    #takeown /f $userdir /R /D Y /A
                    #rename folder to _DEL_originalname
                    $newname = "_DEL_$username"
                    rename-item -path $userdir -newname $newname
                }
            Else
                {
                #get full path            
                Write-Host $userdir.name
                #$currentDir = "c:\test\$userdir" #my original
                $currentDir = $userdir.FullName # this way you don't dupe the start folder
                #takeown /f $userdir /R /D Y /A

                #get ACL of folder
                $acl = Get-Acl $currentDir

                #variable to set new permissions for username of folder           
                #$permission = "domainname\$userdir",”FullControl”,”ContainerInherit,ObjectInherit”,”None”,”Allow” #original
                $permission = "$username@domainname.com",”FullControl”,”ContainerInherit,ObjectInherit”,”None”,”Allow”

                $accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $permission

                #actually set the permissions
                $acl.SetAccessRule($accessRule)
                #$acl | Set-Acl $currentDir #my original
                Set-Acl $currentDir $acl

                #use subinacl to set owner at parent level and below
                $params1 = "/file $currentDir /setowner=domainname\$username"
                $params2 = "/subdirectories $currentDir\*.* /setowner=domainname\$username"
                $params3 = "/subdirectories $currentDir\* /grant=domainname\$username"
                $params4 = "/subdirectories $currentDir\* /grant=domainname\administrators=F"
                Invoke-Expression "$subinacl $params1" | out-null
                Invoke-Expression "$subinacl $params2" | out-null
                Invoke-Expression "$subinacl $params3" | out-null
               # Invoke-Expression "$subinacl $params4" | out-null
                }
        }