Este artículo proviene de un motor de traducción automática.
Seguridad de SharePoint
Recortar los resultados de la búsqueda de SharePoint para mayor seguridad
Ashley Elenjickal
Descargar el ejemplo de código
Búsqueda de SharePoint de Microsoft utiliza una cuenta que normalmente tiene acceso completo de lectura en el repositorio para indizar su contenido. Por lo que es importante que cuando un usuario realiza una consulta para parte del contenido, debe estar restringido para ver sólo los documentos tiene permiso para ver. SharePoint utiliza la lista de control de acceso (ACL) asociada con cada documento para recortar los resultados de consulta que no tiene permiso para ver los usuarios, pero no siempre sea suficiente para satisfacer las necesidades de seguridad de datos el recorte predeterminada proporcionado por SharePoint (recorte out-of-box). En ese caso, desea recortar más de los resultados en función de la estructura de la autenticación de la organización.
Esto es que resulta útil la infraestructura de recorte de seguridad personalizado de SharePoint. SharePoint le ayuda a implementar la lógica empresarial en un módulo independiente y, a continuación, integrarla en el flujo de trabajo del procesador de consultas que da servicio a las consultas. En la ruta de acceso de recorte de seguridad, la reducción de la consulta personalizada sigue recorte de seguridad de fábrica. Por lo tanto, el número de resultados de la consulta después de recorte personalizado debe ser igual o menor que el número de documentos recuperados antes de registrar el ensamblado de trimmer (CST) de seguridad personalizado.
Antes de profundizar en la arquitectura de CST, proporcionaremos una vista rápida de la búsqueda de SharePoint y la nueva infraestructura de autenticación de solicitudes.
Información general acerca de la búsqueda de SharePoint
En un nivel alto, el sistema de búsqueda puede dividirse en dos partes diferenciadas: la canalización del recopilador y la canalización de procesador de consultas.
Canalización del recopiladorEsta parte es responsable de rastreo y la indización de contenido desde varios repositorios, como sitios de SharePoint, sitios HTTP, archivo comparte, Lotus Notes, Exchange Server y así sucesivamente. Este componente se encuentra dentro de MSSearch.exe. Cuando se emite una solicitud a un repositorio de rastreo, en el recopilador se invoca un demonio de filtro, MssDmn.exe, para cargar los controladores de protocolo necesarios y los filtros necesarios para conectar, recuperar y analizar el contenido. La figura 1 representa una vista simplificada de la canalización del recopilador.
Figura 1 A la vista de simplificada de la canalización de Recopilador de SharePoint
SharePoint sólo puede rastrear mediante una cuenta de autenticación NTLM de Windows. El origen de contenido debe autorizar la cuenta de Windows que se envía como parte de la solicitud de rastreo a fin de obtener acceso al contenido del documento. Aunque las solicitudes autenticación es compatible con SharePoint 2010, todavía no es una aplicación de notificaciones y recolector no tendrá acceso a un origen de contenido que tiene sólo la autenticación de solicitudes.
Canalización de procesador de consultasEn SharePoint 2010, dos de los cambios más importantes de la canalización de procesador de consultas se encuentran en su topología de la escalabilidad y el modelo de autenticación. En Microsoft SharePoint Server (MOSS) 2007, el procesador de consultas (consultas y el sitio de configuración de servicio de búsqueda, se denomina servicio de consulta de búsqueda a partir de aquí en) se ejecuta en el mismo proceso como front-end Web (por WFE), pero en 2010 de SharePoint puede ejecutarse en cualquier parte del conjunto de servidores, y también se ejecuta como un servicio Web.
La por WFE se comunica con el servicio de consulta de búsqueda a través de las llamadas de Windows Communication Foundation (WCF). El servicio de consulta de búsqueda ahora está completamente integrado en la parte superior de la infraestructura de autenticación de solicitudes de SharePoint. Esto desacopla la búsqueda de SharePoint desde su estrecha integración con la autenticación de Windows y autenticación de formularios. Por tanto, SharePoint admite distintos modelos de autenticación. El servicio de consulta de búsqueda, recorta los resultados de búsqueda de acuerdo con los derechos de usuario que emite la consulta. El servicio de consulta de búsqueda llama trimmers de seguridad personalizados una vez finalizada la fábrica de recorte. Cuando se realiza una consulta, vea de la figura 2 para los distintos componentes implicados.
La figura 2 del flujo de trabajo de una consulta de origen desde el centro de búsqueda en un sitio de SharePoint
Reducción de seguridad personalizada es parte de la canalización de la consulta, por lo que se va restringir esta discusión para componentes de canalización de la consulta.
Las solicitudes autenticación en SharePoint 2010
Un conocimiento básico de compatibilidad de autenticación de solicitudes de SharePoint 2010 es necesario para implementar la lógica de recorte personalizado dentro de un ensamblado CST. En el entorno de solicitudes de autenticación, la identidad del usuario se mantiene dentro de una envoltura que se llama a un símbolo (token) de seguridad. Contiene un conjunto de aserciones de identidad o de afirmaciones sobre el usuario. Ejemplos de las solicitudes son nombre de usuario, dirección de correo electrónico, número de teléfono, función, y así sucesivamente. Cada solicitud tendrá los atributos como el tipo de y el valor de . Por ejemplo, en una solicitud, el UserLogonName puede ser el tipo de y el nombre del usuario que ha iniciado sesión actualmente puede ser el valor de .
Los tokens de seguridad son emitidos por una entidad que se llama a un servicio de tokens de seguridad (STS). Se trata de un servicio Web que responde a las solicitudes de autenticación de usuario. Una vez que el usuario está autenticado, STS envía hacer de seguridad de un símbolo (token) de seguridad con todos los derechos de usuario. STS pueden configurarse en directo en el mismo conjunto de servidores de SharePoint o como una parte de confiar en el STS de otro que vive outsides el conjunto de servidores: Proveedor-STS de identidad (STS de IP) y el usuario de confianza (punto de reunión de STS), de las partes de STS respectivamente. Si desea utilizar el STS de IP o el punto de reunión de STS debe considerarse cuidadosamente al diseñar la implementación de SharePoint.
SharePoint utiliza el proveedor de solicitudes predeterminado suministrado con el producto en una instalación sencilla. Incluso si se establece el conjunto de servidores por completo mediante la autenticación de Windows, cuando se emite una consulta, un proxy de aplicación de servicio de búsqueda se comunicará con STS para extraer todas las solicitudes del usuario en la seguridad de un símbolo (token). Este símbolo (token), a continuación, se pasa al servicio de consulta de búsqueda mediante una llamada WCF.
Flujo de trabajo de reducción de seguridad personalizada
La lógica de flujo de trabajo de un CST puede representarse en un diagrama de flujo simple, tal como se muestra en de figura 3.
La figura 3 de la lógica de flujo de trabajo de un CST
Como se indicó anteriormente, el servicio de consulta de búsqueda realiza primero la reducción de seguridad de fábrica y, a continuación, busca la presencia de cualquier CSTs asociados con los resultados de búsqueda. La asociación de un origen de contenido determinado a un CST se realiza mediante la definición de una regla de rastreo de para ese origen de contenido. Si el servicio de consulta de búsqueda encuentra cualquier CST asociado a cualquiera de las direcciones URL en los resultados de búsqueda, llama a ese trimmer. Trimmers se cargan en el mismo proceso de trabajo IIS, w3wp.exe, en el que se está ejecutando el servicio de consulta de búsqueda.
Una vez cargada la trimmer, el servicio de consulta de búsqueda se llama al método CheckAccess implementado dentro de la trimmer con un conjunto de resultados de out-of-box recorte asociado con la regla de rastreo que haya definido anteriormente. El método CheckAccess decide si se debe incluir una dirección URL específica en el conjunto de resultados final que se envía al usuario. Para ello, se debe devolver una matriz de bits. Si se establece un bit dentro de esta matriz en true o false “ incluyen ” o “ bloque ” dirección URL a partir del resultado final establecerá. En el caso de que desea detener el procesamiento de las direcciones URL debido a alguna razón inesperado o de rendimiento, se debe producir una PluggableAccessCheckException. Si produce después de procesar una lista parcial de las direcciones URL, el resultado transformado se envía al usuario. El servicio de consulta de búsqueda, quitará todas las direcciones URL sin procesar el conjunto de resultados final.
Pasos implicados en la implementación de un optimizador de seguridad personalizada
En pocas palabras, hay cinco pasos implicados en la correcta implementación de un CST:
- Implementar interfaz ISecurityTrimmer2.
- Implementar los métodos Initialize y CheckAccess, utilizando código administrado
- Crear un archivo de firma del ensamblado y la incluye como parte del proyecto
- Generar el ensamblado
- Implementar el trimmer en la caché de ensamblados global (GAC) de todos los equipos donde se ejecuta un servicio de consulta de búsqueda.
- Crear una regla de rastreo para los orígenes de contenido que desea que el recorte personalizado. Puede hacerlo desde el sitio de administración de búsqueda.
- Registrar el trimmer con la regla de rastreo con el de cmdlet de Windows PowerShell de SPEnterpriseSearchSecurityTrimmer de nuevo.
- Realizar un rastreo completo de de los orígenes de contenido asociado con las reglas de rastreo que creó en el paso 3. Se requiere un rastreo completo para actualizar correctamente todas las tablas relacionadas de la base de datos. Un rastreo incremental no actualizará las tablas apropiadas.
Implementar la interfaz adecuada de seguridad personalizada
MOSS 2007 y Microsoft Search Server 2008 (MSS) admiten la reducción de seguridad personalizada de los resultados de búsqueda a través de la interfaz de ISecurityTrimmer. Esta interfaz tiene dos métodos, inicializar y CheckAccess. Causa de los cambios de arquitectura de SharePoint y el sistema de búsqueda en las versiones de 2010, ambos de estos métodos no funcionarán tal como lo hacían en MOSS 2007. Deben ser reimplementados mediante la interfaz ISecurityTrimmer2. Por tanto, si se intenta registrar un trimmer de MOSS 2007 en SharePoint 2010, se producirá ningún error, indicando que no se ha implementado ISecurityTrimmer2. Otros cambios de MOSS 2007 incluyen:
Cambios en el método InitializeEn MOSS 2007, uno de los parámetros pasados fue el objeto de contexto de búsqueda contexto. Contexto de búsqueda contexto fue el punto de entrada en el sistema de búsqueda y proporciona el contexto de búsqueda para el proveedor de servicios de búsqueda o de sitio (SSP). Esta clase quedó obsoleta en 2010. En su lugar, utilice la clase SearchServiceApplication:
void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication);
Cambios en el método CheckAccessEn MOSS 2007 y SharePoint 2010, el servicio de consulta de búsqueda se llama a los ensamblados de CST. En MOSS 2007, el método CheckAccess tardó sólo dos parámetros, pero en 2010 de SharePoint, el servicio de consulta de búsqueda pasa la identidad del usuario en CheckAccess mediante un tercer parámetro de tipo IIdentity:
public BitArray CheckAccess(IList<String>documentCrawlUrls, IDictionary<String, Object>sessionProperties, IIdentity passedUserIdentity)
Método ISecurityTrimmer2::InitializeSe llama a este método la primera vez que un trimmer se carga en el proceso de trabajo IIS del servicio de consulta de búsqueda. El ensamblado durará durante el proceso de trabajo. Ésta es la firma de este método y una descripción de cómo funciona:
void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication);
staticPropertiesCmdlet de Windows PowerShell adecuado registro –The, New-SPEnterpriseSearchSecurityTrimmer, toma un parámetro denominado “ Propiedades ” (en MOSS 2007 llamó “ configprops ”) a través de la que se pueden pasar con pares de valor, separados por ~. Esto puede resultar útil para inicializar las propiedades de la clase adecuadas.
Por ejemplo: Al pasar “ superadmin ~ foouser ~ poweruser ~ baruser ” hacia el cmdlet New-SPEnterpriseSearchSecurityTrimmer, el parámetro de NameValueCollection tendrán dos elementos en la colección con claves “ superadmin ” ” poweruser ” y de los valores como como “ foouser ” y “ baruser ”, respectivamente.
searchApplication: De si su trimmer requiere un conocimiento más profundo acerca de la instancia del servicio de búsqueda y el conjunto de servidores de SharePoint, utilice un objeto searchApplication para determinar que la información. Para obtener más información sobre la clase SearchServiceApplication, consulte msdn.microsoft.com/library/ee573121(v=office.14) de .
Método ISecurityTrimmer2::CheckAccessEsto implementa la lógica de recorte. Preste especial atención a dos aspectos en este método: la identidad del usuario que ha emitido la consulta y la latencia de rendimiento provocado por un conjunto grande de consulta devuelta.
Los siguientes son la firma de este método y una descripción de cómo funciona:
public BitArray CheckAccess(IList<String>documentCrawlUrls, IDictionary<String, Object>sessionProperties, IIdentitypassedUserIdentity)
documentCrawlUrlsColección de –The de direcciones URL se eliminan mediante esta trimmer de seguridad.
sessionPropertiesInstancia de la consulta única de –A se trata como una sola sesión. Si la consulta que recupera varios resultados, el método CheckAccess se llama varias veces. Puede utilizar este parámetro para compartir los valores o realizar un seguimiento de las direcciones URL que se procesa entre estas llamadas.
passedUserIdentity –This es la identidad del usuario que ha emitido la consulta. Es la identidad mediante el cual, el código permitirá o denegará el acceso al contenido.
BitArray –You debe devolver una matriz de bits igual al número de elementos en documentCrawlUrls. Valor algo dentro de esta matriz en true o false determinará si debe incluirse o bloqueada en el conjunto de resultados final que se envía al usuario la dirección URL de esa posición.
UserIdentityEl motor de consultas de búsqueda de SharePoint 2010 se basa en el modelo de autenticación de solicitudes. El servicio de consulta de búsqueda pasará reclamaciones del emisor de la consulta mediante el parámetro IIdentity. Para obtener el nombre de usuario del usuario que ha emitido la consulta, tengan que transferirse a través de una colección de solicitudes para comparar la claim.ClaimType con la SPClaimTypes.UserLogonName.
El siguiente fragmento de código extrae el nombre de inicio de sesión de usuario desde el símbolo (token) de solicitudes:
IClaimsIdentity claimsIdentity = (IClaimsIdentity)passedUserIdentity;
if (null != claimsIdentity)
{
foreach (Claim claim in claimsIdentity.Claims)
{
if (claim == null)
continue;
if (SPClaimTypes.Equals(claim.ClaimType, SPClaimTypes.UserLogonName))
strUser = claim.Value;
}
}
Puede que necesite información sobre el tipo de autenticación utilizado en la colección de sitios para llamar correctamente la API internas. Para identificar si el usuario ha iniciado sesión con autenticación de Windows, busque la presencia de de ClaimsType.PrimarySid. El código siguiente se busca la notificación de PrimarySid y, a continuación, extrae el nombre de usuario de la misma:
if (SPClaimTypes.Equals(claim.ClaimType, ClaimTypes.PrimarySid))
{
// Extract SID in the format "S-1-5-21-xxxxx-xxxxx-xxx"
strUser = claim.Value;
// Convert SID into NT Format "FooDomain\BarUser"
SecurityIdentifier sid = new SecurityIdentifier(strUser);
strUser = sid.Translate(typeof(NTAccount)).Value;
}
Los formularios o de otros proveedores de autenticación de Windows que no son similares, examine el valor de Claim.OriginalIssuer dentro de la notificación de . Por ejemplo, si el servidor está configurado para la autenticación de formularios mediante el proveedor de suscripciones de SQL de ASP.NET, el Claim.OriginalIssuer tendrá el valor "AspNetSqlMembershipProvider: Forms":
if (SPClaimTypes.Equals(claim.ClaimType, SPClaimTypes.UserLogonName))
{
strUser = claim.Value;
strProvider = claim.OriginalIssuer; // For AspNet SQL Provider value will be
// "Forms:AspNetSqlMembershipProvider"
}
Si la consulta se envía por un usuario anónimo, el valor del método IIdentity.IsAuthenticated será false. En este caso, claimsIdentity.Name tendrá el valor "NT AUTHORITY\\ANONYMOUS LOGON".
Como una nota final sobre el contexto de usuario, limite el uso de la .Name de API WindowsIdentity.GetCurrent () para recuperar la identidad del usuario. Esto proporcionará siempre la identidad del grupo de aplicaciones en las que se está ejecutando el servicio de consulta de búsqueda. System.Threading.Thread.CurrentPrincipal.Identity le ofrecerá la misma identidad que lo pasada al método CheckAccess.
Consideraciones de rendimientoOptimizar el método CheckAccess a toda su extensión. Si la consulta devuelve muchos resultados, puede obtener el trimmer llamar varias veces. Uno de los métodos habituales para controlar esta situación es realizar un seguimiento de las direcciones URL que se procesan dentro de la trimmer a través del parámetro sessionProperties. Una vez que el método, procesa un cierto número de conjuntos de resultados, puede producir un PluggableAccessCheckException. Cuando se produce esta excepción, las direcciones URL se procesan hasta que punto se devuelven al usuario.
Optimizador de seguridad personalizada y los registros del sistema
No se puede escribir código dentro de un trimmer para los registros de sistema que se mantiene en <drive> \ Archivos de programa\Archivos comunes\Microsoft Shared\Web Server Extensions\14\LOGS del programa. El trimmer debe mantener su propio mecanismo de registro de auditoría y de depuración. La única excepción es cuando el método inicia el PluggableAccessCheckException. La cadena de mensaje especificada mientras se inicia se registrarán en el registro del sistema. Información útil que el servicio de consulta de búsqueda se inicia en el archivo incluye el número de documentos que estaban recortada de seguridad. Por ejemplo, la entrada del registro siguiente sugiere que una consulta pasa dos documentos a la CST, pero envía los documentos de cero al usuario, lo que significa que el CST recorta los dos documentos:
04/23/2010 18:13:48.67 w3wp.exe (0x116C) 0x02B4 SharePoint Server Search Query Processor dm2e Medium Trim results: First result position = '0', actual result count = '0', total docs found = '0', total docs scanned = '2'. 742d0c36-ea37-4eee-bf8c-f2c662bc6a45
Trimmers de seguridad personalizada y alertas El servicio de búsqueda de SharePoint tiene una característica denominada alertas de (available only in Windows authentication mode) que puede insertar los cambios en los resultados de consulta para el usuario a través de mensajes de correo electrónico.Sin embargo, cuando se emite una alerta consulta el servicio de temporizador, el servicio de consulta de búsqueda se quite todas las direcciones URL asociadas con CSTs.
Requisitos de firma de ensambladosAcerca de cómo buscar la presencia de un CST coincidente, el servicio de consulta de búsqueda se llama al código de la administración de CST para cargar el ensamblado específico de la GAC.Para ello, el ensamblado debe estar firmada digitalmente.Para obtener métodos firmar un ensamblado, consulte “ Managing Assembly y Manifest Signing ” (https://msdn.microsoft.com/library/ms247066).Una vez que se genera el ensamblado, utilice la herramienta sn.exe para obtener el valor de hash de 64 bits conocido como un símbolo (token) de clave pública.Se necesita este símbolo (token) en el momento del registro adecuado.
Implementación del optimizador de seguridad personalizadaEl assembly CST deben residir en la GAC de cada equipo en el que se está ejecutando el servicio de configuración de sitio y de la consulta de búsqueda.Utilice la administración central | configuración del sistema | servicios del servidor para comprobar el estado del servicio de configuración del consulta y el sitio de búsqueda en cada uno de los equipos de la batería.Si se inicia el servicio, debe importar el CST a ese equipo.No confunda la consulta de búsqueda y el servicio de configuración del sitio con los equipos que contienen los componentes de la consulta.El componente de consulta que se incluye en MSSearch.exe para extraer los resultados del índice.El servicio de configuración de sitio y de la consulta de búsqueda se encuentra en su propio proceso de trabajo IIS de w3wp.exe.
Cmdlets de SharePoint para el registro, ver y eliminar CSTs
MOSS 2007 utiliza la herramienta de línea de comandos stsadm.exe para registrar trimmers personalizados, pero esta herramienta es obsoleto y no se admite en 2010 de SharePoint.En su lugar, use los cmdlets de Windows PowerShell para registrar, ver y eliminar CSTs.Un ensamblado debe estar disponible en la GAC para registrarlos.A continuación, le mostramos cómo utilizarlos:
Registro –Use el SPEnterpriseSearchSecurityTrimmer-nuevo para registrar su trimmer, utilizando los datos de manifiesto del ensamblado, como la versión, referencia cultural y PublicKeyToken.Este ejemplo registra el trimmer a la aplicación de búsqueda denominada “ buscar la aplicación de servicio ”:
New-SPEnterpriseSearchSecurityTrimmer -SearchApplication "Search Service Application" -TypeName "SearchCustomSecurityTrimmer.CustomSecurityTrimmerTest, SearchCustomSecurityTrimmer, Version=14.0.0.0, Culture=neutral, PublicKeyToken=4ba2b4aceeb50e6d" -RulePath file://elenjickal2/* -id 102 -Properties superadmin~foouser~poweruser~baruser
El cmdlet toma la regla de rastreo (rutaDeAccesoARegla), que es un valor entero, como la identidad (id) de las propiedades de configuración adecuadas, (Propiedades) y TypeName, que consta de los datos del manifiesto, así como el nombre de la clase que implementa la interfaz. Parámetros de cmdlet son:
- SearchApplication–Name de la aplicación de servicio de búsqueda asociada con el origen de contenido
- TypeName–This está formado por los manifiesto de datos como versión, referencia cultural y PublicKeyToken (que también se señala a la clase que implementa la interfaz; Esto identifica los ensamblados de la GAC)
- Regla de rastreo RulePath–The asociado con el trimmer
- Tipo de datos int Id–An que identifica la instancia de corte
- Properties–Set de pares nombre/valor separados por ~
Vista –Use el Get-SPEnterpriseSearchSecurityTrimmer cmdlet y pase el nombre de la aplicación de búsqueda. Se puede filtrar aún más mediante el paso adecuada de la identidad o de otras propiedades que se utilizó al registrar (por ejemplo: Get - SPEnterpriseSearchSecurityTrimmer - SearchApplication "Aplicación de servicios de búsqueda").
Eliminar –Use el SPEnterpriseSearchSecurityTrimmer-quitar cmdlet y paso de la aplicación de búsqueda de nombres, así como la identidad de la trimmer (por ejemplo: Remove-SPEnterpriseSearchSecurityTrimmer - SearchApplication "Aplicación de servicios de búsqueda" –id 102).
Nota: Después de registrar el CST, falta un rastreo completo del origen de contenido.
Pasos para la solución de problemas
Éstas son algunas sugerencias para investigar los resultados de búsqueda inesperado:
- Asegúrese de que la regla de rastreo coincide con la ubicación de origen de contenido.
- Compruebe los registros de rastreo para asegurarse de que la cuenta utilizada para rastrear el origen de contenido tiene acceso a él. El rastreo habría dado error si no lo está.
- Asegúrese de que el usuario de la consulta tiene permiso para ver el contenido.
- Tras el registro adecuado, asegúrese de que se realiza un rastreo completo.
- Asegúrese de que el ensamblado adecuado se encuentra en la GAC de todos los equipos en los que se está ejecutando el servicio de consulta de búsqueda.
- Compruebe los registros del sistema para el número de documentos que se recorta por la trimmer de seguridad.
- Utilice la utilidad ProcessExplorer de technet.microsoft.com/sysinternals/bb896653 de para asegurarse de que el ensamblado adecuado se carga en w3wp.exe de proceso de trabajo IIS.
- Asociar al depurador al proceso de trabajo en el que se carga el ensamblado y paso a través de la lógica de corte.
Flexibilidad de lógica de procesamiento de consultas
Ajustar hacia arriba, CSTs proporcionan la flexibilidad para ampliar la lógica necesaria para satisfacer las necesidades de seguridad de empresa personalizada de procesamiento de consultas. Uno debe tener siempre en cuenta que los errores de implementación dentro de la trimmer pueden producir resultados inesperados, por lo que es importante que antes de implementa el trimmer en un entorno de producción, está probado exhaustivamente con diferentes tipos de orígenes de contenido y los proveedores de autenticación.
Ashley Elenjickal y Pooja Harjani formaban parte de un equipo de características de búsqueda de SharePoint en responsable del optimizador de seguridad personalizada en Microsoft. Contacto en de AshleyEl@microsoft.com y de PVaswani@microsoft.com, respectivamente.
Gracias al siguiente experto técnico para este artículo: Michal Piaseczny