четверг, 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 клиент. В итоге у процесса этих самых привилегий может оказаться немножко больше.

Комментариев нет: