В предыдущих статьях рубрики мы подробно разобрали вопросы, связанные с использованием PowerShell и с командами управления, а также проблемы работы со службами Workflow Services. Теперь, завершая разговор об управлении, мы затронем одну из важнейших областей администрирования SharePoint: область безопасности и разрешений. Операции по добавлению учетных записей пользователей, перемещению учетных записей, преобразованию разрешений и даже по удалению учетных записей пользователей — важная составляющая администрирования. Все решения на базе SharePoint должны базироваться на понимании логической иерархии разрешений и на четком представлении о том, как эти разрешения предоставляются.

В SharePoint в качестве инструмента аутентификации и авторизации применяется стандартный каталог Active Directory. Категории Users и Groups внутри этого каталога часто используются для обозначения границ разрешений, что облегчает управление доступом. Однако с течением времени пользователи часто оказываются в группах, к которым они не должны относиться, или утрачивают необходимые разрешения, а нередко вообще прекращают пользоваться ими.

Добавление новых учетных записей

Рассмотрим процедуру добавления новых пользовательских учетных записей. В системе SharePoint 2013 пользовательский интерфейс вполне понятен. Чтобы добавить учетную запись нового пользователя, нам нужно просто обратиться к указателю.

После введения имени SharePoint осуществляет проверку учетной записи пользователя посредством просмотра данных с помощью протокола LDAP (см. экран 1). Но надо сказать, что в различных областях SharePoint взаимодействие с пользователем реализуется по-разному в диалоговых окнах политики пользователей веб-приложения (см. экран 2), администраторов коллекции сайтов (см. экран 3), пользователей и групп коллекции сайтов (см. экран 4), разрешений коллекции сайта (см. экран 5), разрешений списков и библиотек (см. экран 6) и разрешений уровня элемента (см. экран 7).

 

Проверка учетной записи
Экран 1. Проверка учетной записи

 

Политика пользователей веб-приложения
Экран 2. Политика пользователей веб-приложения

 

Администраторы коллекции сайтов
Экран 3. Администраторы коллекции сайтов

 

Пользователи и группы коллекции сайтов
Экран 4. Пользователи и группы коллекции сайтов

 

Разрешения коллекции сайтов
Экран 5. Разрешения коллекции сайтов

 

Разрешения коллекции сайтов
Экран 6. Разрешения коллекции сайтов

 

Разрешения уровня элемента
Экран 7. Разрешения уровня элемента

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

Если бы мы захотели реализовать тот же процесс добавления учетных записей пользователей средствами PowerShell, нам потребовалось бы выполнить ряд простых команд. Например, добавление учетной записи администратора фермы выполняется кодом, приведенным в листинге 1.

А добавление учетной записи администратора оболочки осуществляется с помощью команды:

Add-SPShellAdmin DOMAIN\User

Добавление учетной записи администратора семейства узлов выполняется кодом, приведенным в листинге 2.

Управление средствами безопасности осуществляется с применением пользовательского интерфейса или средствами PowerShell. Контроль разрешений важен, но способность извлечения информации о пользовательских разрешениях играет не меньшую роль. Здесь можно задействовать инструменты сторонних производителей, но PowerShell справляется с задачей ничуть не хуже. С целью считывания списка разрешений для сайта SharePoint достаточно использовать команды PowerShell, показанные в листинге 3 (благодарю за этот пример Константина Власенко).

После запуска операция будет отображаться в окне Grid View, как показано на экране 8.

 

Результаты считывания списка разрешений сайта SharePoint
Экран 8. Результаты считывания списка разрешений сайта SharePoint

Замечательная особенность Power­Shell состоит в том, что вы можете взять такой код и сократить его для упрощения работы.

$SharePointSite = "{SharePoint URL}"
Get-SPUser -Web $SharePointSite |
   select UserLogin, @{name="Explicit
   Permissions"; expression={$_.Roles}},
   @{name="Permissions given via Groups";
   expression={$_.Groups |%{$_.Roles}}},
   Groups | format-Table -auto

После запуска результаты отображаются непосредственно в окне PowerShell (см. экран 9).

 

Вывод результатов в окне PowerShell
Экран 9. Вывод результатов в окне PowerShell

Существуют и другие эффективные сценарии, которые можно использовать для получения отчетов, представленных на Codeplex, а также на сайте Microsoft TechNet Gallery по адресу https://gallery.technet.microsoft.com.

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

Листинг 1. Добавление учетной записи администратора фермы
$FarmAdminAccount = "DOMAIN\User"
$CentralAdministrationWebApplication = Get-SPWebApplciation -IncludeCentralAdministration | Where-Object {$_.Displayname -eq "SharePoint Central Administration v4"}
$CentralAdministrationSite = $CentralAdministrationWebApplication.Sites[0] $CentralAdministrationWeb = $CentralAdministrationSite.RootWeb
$FarmAdministratorGroup = $ CentralAdministrationWeb.SIteGroups["Farm Administrators"]
$
FarmAdministratorGroup.AddUser($FarmAdminAccount, "", $FarmAdminAccount,"Added By PowerShell")
Листинг 2. Добавление учетной записи администратора семейства узлов
$Username = "{DOMAIN\User}"
$WebApplicationUrl = "{SharePoint URL}"
$WebApplication = Get-SPWebApplication $WebApplicationUrl;
$SiteCollection  = $WebApplication.Sites[0];
$SiteCollectionAdmin = $SiteCollection.RootWeb.EnsureUser($Username);
$SiteCollectionAdmin.IsSiteAdmin = $true;
$SiteCollectionAdmin.Update();
Листинг 3. Считывание списка разрешений сайта SharePoint
function Get-PermissionsReport($SharePointSite, $IterateThrough)
{
  $SharePointSite | Get-SPUser | % { New-Object PSObject -Property @{
UserLogin = $_.UserLogin
            'Role Permission: ' = $_.Roles
            'Security Group: ' = $_.Groups | %{$_.Roles}
            Groups = $_.Groups
            Url = $SharePointSite.Url
    }
  }
if($IterateThrough) { $SharePointSite.Webs | % { Get-PermissionsReport $_ $IterateThrough } }
}
$SharePointSite = Get-SPWeb "{SharePoint URL}"
Get-SPPermissionsReport $SharePointSite $true | Sort-Object UserLogin | Out-GridView