AppLocker и CRL


Проверка списков отзыва сертификатов (CRL) полезная вещь позволяющая нам избежать взаимодействия с системами, у которых скомпрометирован сертификат.

Со временем политика использования сертификатов на Windows системах ужесточается. Мы все ощутили это в то время, когда RDP клиент на Windows 7 начал делать жесткие проверки сертификатов. Многие инфраструктуры пришлось тогда подчистить и подправить, чтобы пользователи не испытывали проблем с подключениями к удаленным рабочим столам.

Проверки CRL также могут вызывать проблемы — в виде задержек. Это уже было в нашем опыте с Sharepoint и Exchange серверами. Собственно это все тот же CAPI.

На днях выяснилось, что этой проблеме подвержен AppLocker. Оказывается, даже если он выключен, он всё равно работает где-то в недрах системы, пытается что-то проверять и даже провоцирует проверки сертификатов и CRL. А уж если он включен, и настроены правила Publisher, то и подавно.

Это имеет один неожиданный побочный эффект. Собственно так это и было обнаружено. Суть в том, что PowerShell имеет встроенную поддержку AppLocker, т.е. делает специальные вызовы API, чтобы проверить можно ли запускать тот или иной скрипт. Побочный эффект в том, что из-за проверок CRL в AppLocker PowerShell может работать медленнее: задержка запуска, задержки при загрузке модулей, задержки при выполнении скриптов.

Надо отметить, что эта проблема чаще всего возникает в изолированных сетях. Но иной раз и в сетях, которые просто неправильно сконфигурированы (фаервол и, особенно, DNS).

Неправильно сконфигурированные сети надо лечить.

Рекомендация для изолированных сетей простая: групповыми политиками уменьшить тайм-аут проверки CRL.

Ссылки:

Рекомендация отсюда

Обсуждение PowerShell

Процент выполнеия команды сжатия базы данных


Запустил сжатие MS SQL базы данных SharePoint на днях и наблюдал долгое время «рюмку». Обычно эта операция занимала секунды, но тут по-видимому большой размер и наличие партиций сказались. Отсутствие индикации процесса несколько беспокоило. Оказывается процент выполнения можно посмотреть простой командой:


SELECT percent_complete FROM sys.dm_exec_requests WHERE command = 'DbccFilesCompact'

Поиск неиспользуемых сайтов и привилегированных пользователей в Sharepoint


В Sharepoint есть механизм контроля за неиспользуемыми сайтами. В настройках можно включить рассылку уведомлений собственникам сайтов, если сайт не используется более заданного количества дней. Дополнительно можно включить автоматическое удаление такого сайта после отправки указанного количества уведомлений.

Несмотря на наличие такого удобного механизма, бывает необходимо получить список неиспользуемых сайтов в явном виде, например, для архивирования и последующего ручного удаления. Читать далее

Как извлечь учетные данные из Sharepoint Secure Store


Переносил на днях базу данных используемую в External Type на сайте Sharepoint, и потребовалось уточнить от имени какой учётной записи производится доступ к базе данных. Всю цепочку настроек можно посмотреть через сайт управления кроме используемой учётной записи.

Нашелся вот такой простой скриптик, который выводит все Secure Store Target Application Id и соответствующие им логины и пароли:


$SecureStoreProvider=[Microsoft.Office.SecureStoreService.Server.SecureStoreProviderFactory]::Create()
$site = Get-SPSite -Identity $(Get-SPWebApplication -IncludeCentralAdministration | ?{ $_.IsAdministrationWebApplication}).Url
$SecureStoreProvider.Context = Get-SPServiceContext -Site ($site)
$SecureStoreProvider.GetTargetApplications() |  ForEach-Object {
Write-Host $_.Name
try {
$SecureStoreProvider.GetCredentials($_.ApplicationId) | ForEach-Object {
$Credential = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($_.Credential))
Write-Host "`t$($_.CredentialType): $($Credential)"
}
} catch  {
Write-Host "`t$($_)"  -ForegroundColor yellow
}
}
<div class="container">
<div class="line number1 index0 alt2"><code class="powershell plain"> </code></div>
</div>

Скрипт взят отсюда https://sharepointobservations.wordpress.com/2015/02/05/retrievingrecovering-secure-store-credentials/

Проблема на сервере Office Web Apps после установки обновлений


После накатки последних обновлений на Office Web Apps спустя некоторое время перестал работать предпросмотр и перестали открываться файлы в браузере, причем постепенно: какие-то открываются, какие-то нет. Чудеса и только! Читать далее

Проблема обработки входящей почты в Sharepoint Server 2013


Уже долгое время тянется проблема на Sharepoint Server 2013 связанная с тем, что не работает обработка входящих писем из папки Drop. Читать далее

Sharepoint — мусор на файловой шаре


На днях настраивал в Sharepoint индексацию файловых шар. При изучении ошибок индексации обнаружил попытки Sharepoint проиндексировать файлы вида ~*.* – временные файлы, которые создают приложения Microsoft Office. Эти временные файлы удаляются автоматически при закрытии рабочего файла в приложении Office, но если рабочий файл не закрыли нормальным способом (потеря сети, крах системы, крах приложения и т.п.), то временные файлы могут оставаться на диске и образовывать мусор. Со временем на большом файловом сервере могут скопиться тысячи таких файлов занимающих гигабайты дискового пространства.

В Sharepoint пришлось создать правило индексации исключающее файлы вида ~*.* Это уменьшило число ошибок индексации и заметно уменьшило время индексации: если такой временный файл новый и используется, то он как правило заблокирован для доступа, и процесс индексации начинает его «долбить», растрачивая ресурсы и замедляя индексацию. Это был позитивный результат. Но сам мусор остался на дисках.

Чтобы его удалить, пришлось искать подходящий инструмент. Проблема заключалась в том, что пользователи создают папки очень большой длинны и большой вложенности. Когда имя файла превышает 260 символов (что жёстко задано в Windows File Explorer), то происходит ошибка и процесс очистки останавливается. Поэтому требовался инструмент, который бы использовал низкоуровневый API Win32 и был лишен этого ограничения. Таким инструментом оказалась давно известная утилита robocopy.

Получилась такая команда:

robocopy "E:\Data" null  ~*.* /s /mov

Учтите, что при выполнении robocopy вполне способна полностью занять одно ядро CPU и серьезно нагрузить систему ввода-вывода, поэтому чистку больших томов лучше запускать в часы наименьшей нагрузки.

Полезные ссылки:

1. Long Paths in .NET, Part 1 of 3 [Kim Hamilton]
2. Long Paths in .NET, Part 2 of 3 [Kim Hamilton]
3. Long Paths in .NET, Part 3 of 3 [Kim Hamilton]