Как организовать хранение пользовательских файлов если под рукой только Windows Server 2012
Invite pending
По приходу в компанию сетевые папки были разбросаны по серверам, и админ только и занимался тем, что перенарезал права. Но логика в большинстве компаний одинаковая:
1. У каждого пользователя должна быть своя папка
2. Папка должна быть у каждого отдела
3. Есть общие папки для сотрудников разных отделов, для рабочих групп.
4. Должна быть общая папка помойка — это мнение сугубо только пользователей.
Для упрощения работы пользователей было принято решение, что это должна быть одна точка входа. Как правило, это что-то вроде SharePoint. Но кроме двух серверов с Windows Server 2012 больше не было ничего.
Вот как было решено поступить.
1. Единой точкой входа решил сделать «Мои документы», хранится на файл-сервере. И поменять место хранения не проблема.
2. Не стали разбивать по отделам сотрудников, за основу взяли рабочие группы. Т.е. не важно в каком отделе работает сотрудник, но если у него есть документы, с которыми работает кто-то еще, то их объединяли в рабочую группу.
3. В каждой пользовательской папке должны быть ярлыки на группы, в которых он состоит.
4. Пользователь должен иметь права на отправку файлов в другие отделы. Индивидуально можно и по почте отправить, а вот рассылка группе по почте крупных файлов заставляет быстрее разбухать ящики пользователей.
Структура папок на сервере простейшая, три расшаренные папки:
А теперь по пунктам подробно, как это было реализовано.
Через GPO поменяли места хранения. Но т.к. после применения все добро из моих документов начинает копироваться на сервер, у некоторых это >20Gb, то мы прибегли к фильтру безопасности. Создали объект, связали со всем доменом, почистили фильтр безопасности и добавляли по одному пользователю. Так смогли разгрузить сеть.
Для этого в AD создали подразделение, для своего удобства. Внутри подразделения на создавали группы соответствующие нашим рабочим группам. Параллельно создавали одноименные папки в папке group и нарезали права. В каждой папке есть ссылка на папку из send где будут лежать входящие документы.
В моих документов у пользователей не только их файлы но и ярлыки на рабочие группы и папку отправку больших файлов. Вот листинг скрипта на создание ярлыков:
OU=Рабочие группы — объект где хранятся наши рабочие группы.
Папку send необходимо чистить ежедневно т.к. она очень быстро превратится в помойку. Мы перестраховались, ту папку что есть переносим на сервер резервных копий и создаем по новой папку.
Всё, задача решена, теперь для экономии места включаем дедубликацию, т.к. пользователи очень любят хранить одинаковые файлы. И после окончательного переноса всех пользователей можно настраивать квоты в Диспетчере ресурсов файлового сервера. У нас были грабли тут, мы изначально поставили жесткие квоты на типы файлов, и при переносе пользовательской папки у нас вываливался алярм и приходилось вручную докопировать файлы. Лучше в начале поставить просто уведомление на почту.
В следующей стать расскажу как мы организовали дальше резервное копирование и с использованием дедубликации храним историю файлов.
1. У каждого пользователя должна быть своя папка
2. Папка должна быть у каждого отдела
3. Есть общие папки для сотрудников разных отделов, для рабочих групп.
Для упрощения работы пользователей было принято решение, что это должна быть одна точка входа. Как правило, это что-то вроде SharePoint. Но кроме двух серверов с Windows Server 2012 больше не было ничего.
Вот как было решено поступить.
1. Единой точкой входа решил сделать «Мои документы», хранится на файл-сервере. И поменять место хранения не проблема.
2. Не стали разбивать по отделам сотрудников, за основу взяли рабочие группы. Т.е. не важно в каком отделе работает сотрудник, но если у него есть документы, с которыми работает кто-то еще, то их объединяли в рабочую группу.
3. В каждой пользовательской папке должны быть ярлыки на группы, в которых он состоит.
4. Пользователь должен иметь права на отправку файлов в другие отделы. Индивидуально можно и по почте отправить, а вот рассылка группе по почте крупных файлов заставляет быстрее разбухать ящики пользователей.
Структура папок на сервере простейшая, три расшаренные папки:
- user — поименные папки пользователей, создавались автоматически и с нужными правами;
- group — создавались вручную, параллельно с созданием рабочей группы, права для группы на изменение;
- send — папка для отправки документов в другие рабочие группы, чистим ежедневно.
А теперь по пунктам подробно, как это было реализовано.
1. Папки пользователей
Через GPO поменяли места хранения. Но т.к. после применения все добро из моих документов начинает копироваться на сервер, у некоторых это >20Gb, то мы прибегли к фильтру безопасности. Создали объект, связали со всем доменом, почистили фильтр безопасности и добавляли по одному пользователю. Так смогли разгрузить сеть.
2. Папки рабочих груп
Для этого в AD создали подразделение, для своего удобства. Внутри подразделения на создавали группы соответствующие нашим рабочим группам. Параллельно создавали одноименные папки в папке group и нарезали права. В каждой папке есть ссылка на папку из send где будут лежать входящие документы.
3. Единая точка входа через Мои документы
В моих документов у пользователей не только их файлы но и ярлыки на рабочие группы и папку отправку больших файлов. Вот листинг скрипта на создание ярлыков:
OU=Рабочие группы — объект где хранятся наши рабочие группы.
Import-Module ActiveDirectory
$Groups=Get-ADGroup -Filter * -SearchBase "OU=Рабочие группы,DC=domain,DC=local" -Properties *|Select Name,Members #получаем список групп, нам нужно тольок её имя и список членов
foreach ($Group in $Groups) {
$GroupFolders='\\имя сервера\group\'+$Group.Name #формируем путь ссылки
$LinkGroupFolders=$GroupFolders+"\_Входящие документы.lnk" #в папке группы создаем ярлык на папку входящих документов для отдела, именно там появляются aqks переданные от другого отдела
# Создание ссылки и назначение правка на папку входящие документы
$oShell1 = New-Object -COM WScript.Shell
$oShortcut1 = $oShell1.CreateShortcut($LinkGroupFolders)
$oShortcut1.TargetPath = '\\имя сервера\send\'+$Group.Name
$oShortcut1.Description = "Входящие документы для "+$Group.Name
$oShortcut1.Save()
$acl1 = Get-Acl $LinkGroupFolders
$addacl1 = New-Object System.Security.AccessControl.FileSystemAccessRule($Group.Name, "FullControl", "Allow")
$acl1.AddAccessRule($addacl1)
$acl1 | Set-Acl $LinkGroupFolders
# Создание ссылки и назначение правка на папку входящие документы
$User="" #обнуляем переменную после предыдущего прогона
$User=Get-ADGroupMember -Identity $Group.Name -Recursive |Select SamAccountName #Получаем список пользователей группы
if($User.count){ #Если пользователей меньше 2х то папка рабочих групп и не нужна
foreach ($Users in $User) {
#Ссылки на группы
$UserFolder='\\имя сервера\user\'+$Users.SamAccountName+"\Мои документы\_Группа "+$Group.Name+".lnk" #тут создать ссылку
$oShell = New-Object -COM WScript.Shell
$oShortcut = $oShell.CreateShortcut($UserFolder)
$oShortcut.TargetPath = $GroupFolders
$oShortcut.Description = "Совместная рабочая группа "+$Group.Name
$oShortcut.Save()
$acl = Get-Acl $UserFolder
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule($Users.SamAccountName, "FullControl", "Allow")
$acl.AddAccessRule($addacl)
$acl | Set-Acl $UserFolder
#Создание ярлыка на отправка документов, со списко всех рабочих групп
$UserFolder='\\имя сервера\user\'+$Users.SamAccountName+"\Мои документы\_Отправка документов.lnk" #тут создать ссылку
$oShell = New-Object -COM WScript.Shell
$oShortcut = $oShell.CreateShortcut($UserFolder)
$oShortcut.TargetPath = '\\имя сервера\send\'
$oShortcut.Description = "Передача документов по отделам"
$oShortcut.Save()
$acl = Get-Acl $UserFolder
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule($Users.SamAccountName, "FullControl", "Allow")
$acl.AddAccessRule($addacl)
$acl | Set-Acl $UserFolder
}
}
}
4. Отправка файлов
Папку send необходимо чистить ежедневно т.к. она очень быстро превратится в помойку. Мы перестраховались, ту папку что есть переносим на сервер резервных копий и создаем по новой папку.
Import-Module ActiveDirectory
$Groups=Get-ADGroup -Filter * -SearchBase "OU=Рабочие группы,DC=domain,DC=local" -Properties *|Select Name,Members #получаем список групп, нам нужно тольок её имя и список членов
foreach ($Group in $Groups) {
$CreateSendFolders="\\имя сервера\send\"+$Group.Name
$BackupFolderst=Get-Date -Format "yyyy.MM.dd HH-mm-ss"
$BackupFolderst2="\\Имя сервера резервных копий\e$\send\"+$Group.Name
Move-Item -Path $CreateSendFolders -Destination $BackupFolderst2"_"$BackupFolderst #Переносим папку, переименовав её, добавив в конец дату формирования копии
New-Item -Path $CreateSendFolders -ItemType "directory" #Создаем новую пустую папку
#Назначаем права
$aclSendFolders = Get-Acl $CreateSendFolders
$addaclSendFolders2 = New-Object System.Security.AccessControl.FileSystemAccessRule($Group.Name, "CreateDirectories,DeleteSubdirectoriesAndFiles,ExecuteFile,ListDirectory,ReadData,ReadExtendedAttributes,ReadPermissions", "Allow")
$aclSendFolders.AddAccessRule($addaclSendFolders2)
$addaclSendFolders = New-Object System.Security.AccessControl.FileSystemAccessRule($Group.Name, "CreateDirectories,DeleteSubdirectoriesAndFiles,ExecuteFile,ListDirectory,ReadData,ReadExtendedAttributes,ReadPermissions","ContainerInherit,ObjectInherit","InheritOnly", "Allow")
$aclSendFolders.AddAccessRule($addaclSendFolders)
$aclSendFolders | Set-Acl $CreateSendFolders
#Пользователям домена даем права на добавление файлов и просмотр структуры
$aclSendFoldersAll = Get-Acl $CreateSendFolders
$addaclSendFoldersAll = New-Object System.Security.AccessControl.FileSystemAccessRule("Пользователи домена", "CreateDirectories,CreateFiles,ListDirectory", "Allow")
$aclSendFoldersAll.AddAccessRule($addaclSendFoldersAll)
$aclSendFoldersAll | Set-Acl $CreateSendFolders
}
#Удаляем старый копии, старее одного месяца
$OldDate = (Get-Date).AddMonths(-1)
Get-ChildItem -Path \\Имя сервера резервных копий\e$\send\ -Recurse | Where {$_.LastWriteTime -le "$OldDate"} | Remove-Item -Recurse
Всё, задача решена, теперь для экономии места включаем дедубликацию, т.к. пользователи очень любят хранить одинаковые файлы. И после окончательного переноса всех пользователей можно настраивать квоты в Диспетчере ресурсов файлового сервера. У нас были грабли тут, мы изначально поставили жесткие квоты на типы файлов, и при переносе пользовательской папки у нас вываливался алярм и приходилось вручную докопировать файлы. Лучше в начале поставить просто уведомление на почту.
В следующей стать расскажу как мы организовали дальше резервное копирование и с использованием дедубликации храним историю файлов.