Показаны сообщения с ярлыком Windows Services. Показать все сообщения
Показаны сообщения с ярлыком Windows Services. Показать все сообщения

среда, 13 января 2010 г.

Не запускается сервис WIN-RM

Вроде бы все хорошо. Вновь установленный сервер. Введен в домен. Ничего на него не ставилось, чист, как юная девственница. Устанавливаем ws-management core framework. Все, вроде бы чудесно. Выполняем enable-psremoting. И тут странный облом. Ошибка. В логах вот такое сообщение:

winrm_error

О ужас. Что же делать? Недолгое гугление приводит вот к таким результатам. А именно, сервис WIN-RM стартует под аккаунтом network service. Одна из доменных политик изменила политику Log on as a service (SeInteractiveLogonRight) так, что этот аккаунт потерял эту привилегию. Соответствующая корректировка сразу решила все проблемы.

Вот правильные настройки для network service account.

Privilege Source

Replace a process-level token (SeAssignPrimaryTokenPrivilege)

Explicit assignment

Adjust memory quotas for a process (SeIncreaseQuotaPrivilege)

Explicit assignment

Generate security audits (SeAuditPrivilege)

Explicit assignment

Bypass traverse checking (SeChangeNotifyPrivilege)

Through membership in the Everyone group

- Access this computer from the network (SeNetworkLogonRight)

Through membership in the Everyone group

- Log on as a batch job (SeBatchLogonRight)

Through membership in the Everyone group

- Log on as a service (SeInteractiveLogonRight)

Explicit assignment

- Impersonate a client after authentication

Through membership in the Everyone group

суббота, 6 июня 2009 г.

SID для службы

В Windows Vista и более новых версиях ОС от Microsoft, есть довольно интересная и полезная фича – назначение SID (Security Identifier), каждому сервису отдельно. Добиться этого можно так:

sc sidtype
ОПИСАНИЕ.
        Изменение параметра типа идентификатора безопасности (SID) службы.

        Если данный параметр имеет значение unrestricted, диспетчер управления
        службами (SCM) добавит SID этой службы к маркеру процесса службы в
        следующий раз, когда этот процесс будет запущен при запуске первой из
        своих служб.  Данный параметр можно использовать только для служб
        пользовательского режима Win32.

        Если данный параметр имеет значение restricted, диспетчер управления
        службами (SCM) добавит SID этой службы к маркеру процесса службы в
        следующий раз, когда этот процесс будет запущен при запуске первой из
        своих служб. Кроме того, SID данной службы будет добавлен к списку
        ограничивающих SID в маркере процесса. Маркер процесса будет являться
        ограниченным маркером.  Дополнительные сведения об ограниченном маркере
        см. в MSDN. Данный параметр можно использовать только для служб
        пользовательского режима Win32. Кроме того, если служба является
        участником разделяемого процесса, все службы, участвующие в этом
        процессе, должны иметь данный тип SID,  чтобы описанные выше действия
        были выполнены.

        Если данный параметр имеет значение none, SCM не будет добавлять SID
        службы к маркеру процесса службы.
ИСПОЛЬЗОВАНИЕ:
        sc <сервер> sidtype [имя службы] [тип]

ПАРАМЕТРЫ:
        тип = <none|unrestricted|restricted>

То есть, вы можете указать системе, чтобы она сгенерировала специальный SID для вашей службы. К вашему сервису будет привязан SID, что даст возможность давать права на ресурсы конкретно вашей службе, и никому другому. Для этого необходимо, чтобы служба имела тип SID – unrestricted

Еще один интересный параметр – restricted. В том случае, когда он применяется, в маркер процесса, исполняющего службу, добавляется список ограничивающих SID. Например, если некий процесс выполняется с правами некоего пользователя и имеет доступ к некой папке, то если вы добавите к его маркеру ограничивающие SID, такие, что они не имеют таких прав – то и процесс, при попытке доступа в нее получит отказ. Это происходит потому, что при проверке доступа происходит две независимые проверки. Одна, для стандартного списка SID, вторая – для ограничивающего. Доступ предоставляется только в том случае, если обе проверки проходят без ошибок. По большому счету такой подход защищает систему от вашей службы, в случае, если она будет “взломана”, ведь обладая таким маркером она потеряет доступ на запись во многие места системы.

На самом деле я не большой специалист в написании скриптов :), однако вот таким вот макаром можно узнать, какие службы с каким типом SID запущен в  Vista:

cls

function sidType ($name)
{
    $si = new-object System.Diagnostics.ProcessStartInfo
    $si.FileName = "sc.exe"
    $si.CreateNoWindow = $true
    $si.RedirectStandardOutput = $true
    $si.UseShellExecute = $false
     $si.Arguments = "qsidtype " + $name

    $proc = [diagnostics.process]::Start($si)
    $proc.WaitForExit()
    [string] $str = $proc.StandardOutput.ReadToEnd().Trim().Split("`n") | Select-String -Pattern "SERVICE_SID_TYPE: "
    $str.Replace("SERVICE_SID_TYPE: ","").Trim()
};

$wmiServices = @{}
Get-WmiObject -Namespace root\cimv2 -Class Win32_Service| ForEach-Object {
    $sidType = sidType $_.Name
    $wmiServices.Add($_.Name,$sidType)
    }

$wmiServices.Keys | where-object {$wmiServices[$_] -eq "UNRESTRICTED"} | Format-Table

В результате, с типом RESTRICTED в моей системе запущены всего несколько служб:

NetTcpPortSharing
DPS
BFE
pla
MpsSvc

четверг, 4 июня 2009 г.

О системных пользователях.

Как всем, наверное, известно, в системе есть такие встроенные пользователи как:

  • LocalService
  • NetworkService
  • LocalSystem

Что это за пользователи, и чем они отличаются? Зачем они собственно нужны? Особенно первые два.

Сначала о них. Первые два пользователя появились в win2k3/win xp. Эти учетные записи созданы специально для обеспечения безопасного исполнения служб. Раньше все службы исполнялись либо с правами Local System, либо с правами специально созданного пользователя. Это, в некотором роде создавало проблему, поскольку не все стремились создавать пользователей под каждую установленную службу, а тем более следить за паролями и правами этих пользователей.

В конечном итоге родились два этих специфических пользователя. Первый из них, обладает следующими привилегиями:

  • SE_ASSIGNPRIMARYTOKEN_NAME (disabled)
  • SE_AUDIT_NAME (disabled)
  • SE_CHANGE_NOTIFY_NAME (enabled)
  • SE_CREATE_GLOBAL_NAME (enabled)
  • SE_IMPERSONATE_NAME (enabled)
  • SE_INCREASE_QUOTA_NAME (disabled)
  • SE_SHUTDOWN_NAME (disabled)
  • SE_UNDOCK_NAME (disabled)
  • Любыми другими привилегиями, назначенными пользователям и аутентифицированным пользователям (Authenticated Users)

При работе в сети этот пользователь аутентифицируется как анонимный пользователь. В отличие от него NetworkService представляется другим системам в сети как учетная запись компьютера, на котором он запущен, а так же его маркер доступа (token) содержит SID’ы групп everyone и Authenticated Users. Имеет такой набор привилегий:

  • SE_ASSIGNPRIMARYTOKEN_NAME (disabled)
  • SE_AUDIT_NAME (disabled)
  • SE_CHANGE_NOTIFY_NAME (enabled)
  • SE_CREATE_GLOBAL_NAME (enabled)
  • SE_IMPERSONATE_NAME (enabled)
  • SE_INCREASE_QUOTA_NAME (disabled)
  • SE_SHUTDOWN_NAME (disabled)
  • SE_UNDOCK_NAME (disabled)
  • Любыми другими привилегиями, назначенными пользователям и аутентифицированным пользователям (Authenticated Users)

И наконец LocalSystem. В сети он представляется как компьютер, на котором он запущен. Однако набор его привилегий намного более обширен:

  • SE_ASSIGNPRIMARYTOKEN_NAME (disabled)
  • SE_AUDIT_NAME (enabled)
  • SE_BACKUP_NAME (disabled)
  • SE_CHANGE_NOTIFY_NAME (enabled)
  • SE_CREATE_GLOBAL_NAME (enabled)
  • SE_CREATE_PAGEFILE_NAME (enabled)
  • SE_CREATE_PERMANENT_NAME (enabled)
  • SE_CREATE_TOKEN_NAME (disabled)
  • SE_DEBUG_NAME (enabled)
  • SE_IMPERSONATE_NAME (enabled)
  • SE_INC_BASE_PRIORITY_NAME (enabled)
  • SE_INCREASE_QUOTA_NAME (disabled)
  • SE_LOAD_DRIVER_NAME (disabled)
  • SE_LOCK_MEMORY_NAME (enabled)
  • SE_MANAGE_VOLUME_NAME (disabled)
  • SE_PROF_SINGLE_PROCESS_NAME (enabled)
  • SE_RESTORE_NAME (disabled)
  • SE_SECURITY_NAME (disabled)
  • SE_SHUTDOWN_NAME (disabled)
  • SE_SYSTEM_ENVIRONMENT_NAME (disabled)
  • SE_SYSTEMTIME_NAME (disabled)
  • SE_TAKE_OWNERSHIP_NAME (disabled)
  • SE_TCB_NAME (enabled)
  • SE_UNDOCK_NAME (disabled)

На самом деле, редко каким службам необходим такой набор возможностей. Поэтому Microsoft рекомендует использовать для своих целей любой из первых двух, в зависимости от потребностей.

Мало того, в Vista/Win7 появилась возможность еще более активно манипулировать привилегиями. Для этого в sc.exe появился параметр privs:

sc privs
ОПИСАНИЕ.
        Изменение параметра необходимых прав для службы.
        Параметры прав вступают в силу, когда процесс службы запускается при
        запуске первой службы процесса. В этот момент диспетчер управления
        службами (SCM) определяет набор всех прав,  необходимых всем
        службам-участникам этого процесса, а затем создает процесс с такими
        правами. Если данный параметр отсутствует, предполагается, что службе
        требуются все права, разрешенные подсистемой безопасности для процесса,
        который выполняется от имени учетной записи, настроенной для этой
        службы.

ИСПОЛЬЗОВАНИЕ:
        sc <сервер> privs [имя службы] [права]

ПАРАМЕТРЫ:
        права = <Права(разделенные косой чертой (/))>
                     [Например, SeBackupPrivilege/SeRestorePrivilege]

Этот параметр позволяет дополнительно управлять (удалять/добавлять) привилегии службы. На самом деле эти настройки хранятся в реестре, например у dhcp клиента они такие:

servicePrivs

Однако это не всегда так. Например:

servicePrivs2 

в случае с одним из экземпляров процесса svchost, запущеным под LocalService, набор привилегий складывается как все привилегии перечисленные в той группе служб, в которой запускается наш dhcp клиент. В итоге у процесса этих самых привилегий может оказаться немножко больше.

четверг, 28 мая 2009 г.

Немножко об управлении службами

В ответ на предыдущий пост оказалось вот что:

post-4703-1243455996

Вероятно, эти службы просто отключены. А в списке services.msc их не видно по той простой причине, что они имеют не английские названия, как ожидается, а русские. Вероятно так отработал руссификатор. Поэтому не люблю их :). Особенно, если они неофициальные.

Само собой разумеется, что службами можно управлять. Дело это достаточно простое с одной стороны, и сложное с другой. Нужно знать, что можно делать, а чего делать нельзя. Для управления службами есть утилита командной строки sc.exe. Это наиболее быстрый и полный способ это делать.

Использование:
sc <сервер> [команда] [имя службы] <параметр1> <параметр2>...

Параметр <сервер> задается в формате "\\Имя сервера" . Используя этот параметр можну управлять сервисами удаленно, на других компьютерах, если, конечно, у вас есть на это права.
Чтобы получить справку о командах: "sc [команда]"

Команда  
query Запрос состояния службы или перечисление состояний типов служб
queryex Запрос расширенного состояния службы или перечисление состояний типов служб
start Запуск службы
pause Отправка службе управляющего запроса PAUSE.
interrogate Отправка службе управляющего запроса INTERROGATE. Это управляющее сообщение – указание службе, обновить свой статус  у SCM.
continue Отправка службе управляющего запроса CONTINUE
stop Отправка службе запроса STOP
config Изменение конфигурации службы (необратимое).
description Изменение описания службы
failure Изменение действия, выполняемого службой при сбое. Тут можно задать действие, происходящее при отказе службы. Например можно службу перезапустить.
failureflag Изменение флага действия, выполняемого службой при сбое. Флаг показывает, будут ли предприниматься действия по восстановлению, указанные в команде failure
sidtype Изменение типа SID службы
privs Изменение привилегий, требуемых для службы
qc Запрос данных конфигурации для службы
qdescription Запрос описания службы
qfailure Запрос действия, выполняемого службой при сбое
qfailureflag Запрос флага действия, выполняемого службой при сбое
qsidtype Запрос типа SID службы
qprivs Запрос привилегий, требуемых для службы
delete Удаление службы (из реестра)
create Создание службы. (добавление ее в реестр)
control Отправка службе управляющего сигнала
sdshow Отображение дескриптора безопасности службы
sdset Установка дескриптора безопасности службы
showsid Отображение строки SID службы, соответствующей произвольному имени
GetDisplayName Получение выводимого имени службы
GetKeyName Получение имени раздела для службы
EnumDepend Перечисление зависимостей службы

Следующие команды не требуют имени службы:
     sc <сервер> <команда><option>

boot (ok | bad) Показывает, требуется ли сохранить последнюю загрузку в качестве последней удачной конфигурации загрузки
Lock Блокировка базы данных служб
QueryLock Запрос состояния блокировки базы данных диспетчера управления службами

В нашем случая, я думаю, надо просто запустить консоль с привилегиями администратора, и в ней выполнить несколько команд, имейтеввиду, что пробел после “start=” и перед типом старта обязателен:

sc config tapisrv start= demand
sc config rasauto start= demand
sc config rasman start= demand


пятница, 19 октября 2007 г.

NTP - Cisco+W2k3 Server

Борьба с циской закончилась. NTP таки поднялся.

Буквально пару дней назад возникло женание настроить синхронизацию цисок по NTP с серверами-контроллерами домена. В этой роли используются Windows 2000 Server. Сходу решить задачку не удалось - не заработало. Пришлось мучать гугл. После недолгого допроса гугл рассказал мне, что в качестве протокола сенхронизации времени в Windows 2000 используется SNTP, который не понимает моя циска. Но зато в Windows 2003/XP используется как раз NTP. Ура! Попытка настроить синхронизацию с рабочей станцией под управлением XP увенчалась успехом. Но ведь рабочая станция - это не есть хорошо, подумал я. Надо переделать. И тут начались проблемы. Синхронизация с одним из серверов на Windows 2003 не шла ни в какую. Гугл снова был допрошен на предмет настроек NTP Wn2k3 сервера. Оказалось, что режим NTP-сервера включен по молчанию только на контроллерах домена. Именно они могут служить источником времени. Перенастройка моего сервера помогла, циска увидела пакеты и поняла их. Однако синхронизироваться упорно не хотела. Первый день закончился неудачей. Кроме всего мной был удален один параметр, автоматически создаваймый циской, по совету одного буржуя. Как оказалось потом - зря.
День второй начался с допроса гугла на предмет ковыряния во внутренностях NTP, с целью понять диагностику, выдаваемую циской. Цифры стали понятны. Разница во времени между циской и сервером была большой - несколько десятков секунд. А в моей памяти четко отложилось магическое число, сказанное гуглом - 11 секунд. После этого, якобы, циска обзывает сервер инвалидом :). Голова шла кругом, и я решил вернуть удаленный параметр и уменьшить время расхождения, задав его вручную. И, о чудо! Оно заработало :)
По ходу допросов многие товарищи говорили что циска не понимает Windows, и что якобы это "всем понятно", и что не стоит пользоваться Windows в качестве сервера времени по этой причине. Вот и наш ответ Членберлену - все работает!