SharePoint 2013/2016: Informe de análisis de permisos de usuarios específicos mediante PowerShell
Analizar los permisos de SharePoint para un usuario en particular suele ser una tarea común en la administración de SharePoint. En general, ¿cómo comprobamos qué permisos tiene un usuario sobre el contenido de SharePoint? Al ingresar a la página de configuración del sitio o de la lista y verificar los permisos para el usuario en particular, ¿no es así? Bueno, es posible que desees analizar los permisos del usuario en particular para todo tu entorno de SharePoint. ¿Qué hay sobre eso? Todos y cada uno de los sitios, listas, bibliotecas, carpetas y elementos de listas de SharePoint pueden tener permisos únicos. Incluso puede resultar más complicado cuando se tienen varias granjas de servidores de SharePoint.
Bueno, ¡PowerShell es un salvavidas! Mi solución de informes de permisos es escanear y proporcionar un informe para ver el permiso de un usuario en la aplicación web de SharePoint. ¡Con este script, puedes analizar y rastrear la seguridad de manera efectiva! Compruebe qué permisos en una cuenta se han otorgado en todos los lugares de SharePoint. Este script de PowerShell escanea las siguientes áreas para recuperar los derechos de acceso de un usuario específico:
- Grupo de administradores de fincas.
- Políticas de aplicaciones web de administración central
- Administradores de colecciones de sitios
- Analiza todas las colecciones de sitios y subsitios con permisos únicos a los que el usuario tiene acceso.
- Analiza todas las listas y bibliotecas con permisos únicos a los que el usuario tiene acceso.
- Analiza todas las carpetas y enumera los elementos que tienen permisos en el sitio al que el usuario tiene acceso.
Simplemente cambie la sección Variables de entrada, proporcione parámetros para las variables de ID de usuario, Aplicación web y Ruta del informe, y ejecute el script en PowerShell.
Después de generar un informe de permisos de SharePoint, este script genera un archivo CSV, que se puede exportar como un archivo de Excel para permitir investigaciones y análisis adicionales fuera de un entorno de SharePoint. Obtiene datos como: Objeto, Título, URL, Tipo de permiso, Permisos, como se muestra en la siguiente captura de pantalla.
Script de PowerShell para generar informes de permisos de usuario en SharePoint 2013/2016
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Function to retrieve Permission data
Function Get-PermissionInfo([String]$UserID, [Microsoft.SharePoint.SPSecurableObject]$Object)
{
#Object Array to hold Permission data
$PermissionDataCollection = @()
if($Object)
{
#Determine the given Object type and Get URL of it
switch($Object.GetType().FullName)
{
"Microsoft.SharePoint.SPWeb" { $ObjectType = "Site" ; $ObjectURL = $Object.URL }
"Microsoft.SharePoint.SPListItem"
{
if($Object.Folder -ne $null)
{
$ObjectType = "Folder" ; $ObjectURL = "$($Object.Web.Url)/$($Object.Url)"
}
else
{
$ObjectType = "List Item"; $ObjectURL = "$($Object.Web.Url)/$($Object.Url)"
}
}
#Microsoft.SharePoint.SPList, Microsoft.SharePoint.SPDocumentLibrary, "Microsoft.SharePoint.SPPictureLibrary",etc
default { $ObjectType = "List/Library"; $ObjectURL = "$($Object.ParentWeb.Url)/$($Object.RootFolder.URL)" }
}
#Get Permissions of the user on given object - Such as: Web, List, Folder, ListItem
$UserPermissionInfo = $Object.GetUserEffectivePermissionInfo($UserID)
#Iterate through each permission and get the details
foreach($UserRoleAssignment in $UserPermissionInfo.RoleAssignments)
{
#Get all permission levels assigned to User account directly or via SharePOint Group
$UserPermissions=@()
foreach ($UserRoleDefinition in $UserRoleAssignment.RoleDefinitionBindings)
{
#Exclude "Limited Accesses"
if($UserRoleDefinition.Name -ne "Limited Access")
{
$UserPermissions += $UserRoleDefinition.Name
}
}
#Determine Permissions granted directly or through SharePoint Group
if($UserPermissions)
{
if($UserRoleAssignment.Member -is [Microsoft.SharePoint.SPGroup])
{
$PermissionType = "Member of SharePoint Group: " + $UserRoleAssignment.Member.Name
}
else
{
$PermissionType = "Direct Permission"
}
$UserPermissions = $UserPermissions -join ";"
#Create an object to hold storage data
$PermissionData = New-Object PSObject
$PermissionData | Add-Member -type NoteProperty -name "Object" -value $ObjectType
$PermissionData | Add-Member -type NoteProperty -name "Title" -value $Object.Title
$PermissionData | Add-Member -type NoteProperty -name "URL" -value $ObjectURL
$PermissionData | Add-Member -type NoteProperty -name "Permission Type" -value $PermissionType
$PermissionData | Add-Member -type NoteProperty -name "Permissions" -value $UserPermissions
$PermissionDataCollection += $PermissionData
}
}
Return $PermissionDataCollection
}
}
#Function to Generate Permission Report
Function Generate-PermissionReport($UserID, $WebAppURL, $ReportPath)
{
#Output Report location, delete the file, If already exist!
if (Test-Path $ReportPath)
{
Remove-Item $ReportPath
}
#Write Output Report CSV File Headers
"Object, Title, URL, Permission Type, Permissions" | out-file $ReportPath
###Check Whether the Search Users is a Farm Administrator ###
Write-host "Scanning Farm Administrators..."
#Get the SharePoint Central Administration site
$AdminWebApp = Get-SPwebapplication -includecentraladministration | where {$_.IsAdministrationWebApplication}
$AdminSite = Get-SPWeb $AdminWebApp.Url
$AdminGroupName = $AdminSite.AssociatedOwnerGroup
$FarmAdminGroup = $AdminSite.SiteGroups[$AdminGroupName]
#enumerate in farm adminidtrators groups
foreach ($user in $FarmAdminGroup.users)
{
if($user.LoginName.Endswith($UserID,1)) #1 to Ignore Case
{
"Farm, $($AdminSite.Title), $($AdminWebApp.URL), Farm Administrators Group, Farm Administrator" | Out-File $ReportPath -Append
}
}
### Check Web Application User Policies ###
Write-host "Scanning Web Application Policies..."
$WebApp = Get-SPWebApplication $WebAppURL
foreach ($Policy in $WebApp.Policies)
{
#Check if the search users is member of the group
if($Policy.UserName.EndsWith($UserID,1))
{
#Write-Host $Policy.UserName
$PolicyRoles=@()
foreach($Role in $Policy.PolicyRoleBindings)
{
$PolicyRoles+= $Role.Name +";"
}
#Send Data to CSV File
"Web Application, $($WebApp.Name), $($WebApp.URL), Web Application Policy, $($PolicyRoles)" | Out-File $ReportPath -Append
}
}
#Convert UserID Into Claims format - If WebApp is claims based! Domain\User to i:0#.w|Domain\User
if($WebApp.UseClaimsAuthentication)
{
$ClaimsUserID = (New-SPClaimsPrincipal -identity $UserID -identitytype 1).ToEncodedString()
}
else
{
$ClaimsUserID = $UserID
}
#Get all Site collections of given web app
$SiteCollections = Get-SPSite -WebApplication $WebAppURL -Limit All
#Loop through all site collections
foreach($Site in $SiteCollections)
{
Write-host "Scanning Site Collection:" $site.Url
###Check Whether the User is a Site Collection Administrator
foreach($SiteCollAdmin in $Site.RootWeb.SiteAdministrators)
{
if($SiteCollAdmin.LoginName.EndsWith($ClaimsUserID,1))
{
"Site Collection, $($Site.RootWeb.Title), $($Site.RootWeb.Url), Site Collection Administrators Group, Site Collection Administrator" | Out-File $ReportPath -Append
}
}
#Get all webs
$WebsCollection = $Site.AllWebs
#Loop throuh each Site (web)
foreach($Web in $WebsCollection)
{
if($Web.HasUniqueRoleAssignments -eq $True)
{
Write-host "Scanning Site:" $Web.Url
#Get Permissions of the user on Web
$WebPermissions = Get-PermissionInfo $ClaimsUserID $Web
#Export Web permission data to CSV file - Append
$WebPermissions | Export-csv $ReportPath -notypeinformation -Append
}
#Check Lists with Unique Permissions
Write-host "Scanning Lists on $($web.url)..."
foreach($List in $web.Lists)
{
if($List.HasUniqueRoleAssignments -eq $True -and ($List.Hidden -eq $false))
{
#Get Permissions of the user on list
$ListPermissions = Get-PermissionInfo $ClaimsUserID $List
#Export Web permission data to CSV file - Append
$ListPermissions | Export-csv $ReportPath -notypeinformation -Append
}
#Check Folders with Unique Permissions
$UniqueFolders = $List.Folders | where { $_.HasUniqueRoleAssignments -eq $True }
#Get Folder permissions
foreach($folder in $UniqueFolders)
{
$FolderPermissions = Get-PermissionInfo $ClaimsUserID $folder
#Export Folder permission data to CSV file - Append
$FolderPermissions | Export-csv $ReportPath -notypeinformation -Append
}
#Check List Items with Unique Permissions
$UniqueItems = $List.Items | where { $_.HasUniqueRoleAssignments -eq $True }
#Get Item level permissions
foreach($item in $UniqueItems)
{
$ItemPermissions = Get-PermissionInfo $ClaimsUserID $Item
#Export List Items permission data to CSV file - Append
$ItemPermissions | Export-csv $ReportPath -notypeinformation -Append
}
}
}
}
Write-Host Permission Report Generated successfully!
}
#Input Variables
$WebAppURL = "https://intranet.crescent.com"
$Userid ="Crescent\Salaudeen"
$ReportPath = "D:\Reports\PermissionRpt.csv"
#Call the function to generate user access report
Generate-PermissionReport $Userid $WebAppURL $ReportPath
También puede descargar el script desde la Galería TechNet: Informe de permisos de SharePoint: verificar los derechos de acceso para un usuario específico
Este script se divide en dos funciones. Para que pueda usar la primera función: Get-PermissionInfo, para obtener datos de permisos con alcance en un informe/sitio de permisos de una colección de sitios. El script anterior tiene como alcance una aplicación web en particular y puede llamar a la misma función en todas sus aplicaciones web para obtener los informes completos de permisos de SharePoint.
Scripts de PowerShell para generar informes de permisos de SharePoint:
Aquí está mi lista de scripts de PowerShell para crear varios informes para la auditoría de permisos de SharePoint.
- Informe de permisos de SharePoint 2010: comprobar los derechos de acceso de un usuario específico
- Informe de permisos de usuarios y grupos de SharePoint
- Informe de permisos únicos en SharePoint
- Informe de propietarios de colecciones de sitios de SharePoint
- Informe de administradores de colecciones de sitios para todos los sitios de SharePoint
- Exporte usuarios y grupos de SharePoint a Excel usando PowerShell
- Informe de niveles de permisos de SharePoint
Herramientas de terceros:
Existen muchas herramientas para analizar y auditar los permisos de los usuarios de SharePoint (¡y más funciones, naturalmente!). Aquí están algunas:
- Kit de herramientas de documentación para SharePoint - SPDocKit
- Herramienta de gestión de SharePoint de Sharegate
- Informe de permisos de SharePoint de BoostSolutions
- Gestión de permisos de SharePoint
- ControlPoint de Metalogix
