Файл: Руссинович М., Маргозис А. Утилиты Sysinternals. Справочник администратора 2012.pdf
Добавлен: 29.10.2018
Просмотров: 33131
Скачиваний: 742

172 Часть
II
Работа с утилитами
она будет выполнена на всех компьютерах текущего домена или рабочей
группы:
psinfo \\*
Если не использовать ни один из этих параметров, утилита будет выпол-
нять операции на локальном компьютере.
Альтернативные учетные данные
При выполнении операций на удаленных компьютерах утилиты PsTools дей-
ствуют от имени учетной записи, под которой они запущены на локальной
системе. Если это локальная, а не доменная учетная запись домена, аутенти-
фикация пройдет, только если на удаленном компьютере имеется учетная
запись с таким же именем и паролем.
Есть несколько причин для запуска утилит от имени другой учетной за-
писи на удаленной системе. Во-первых, большинство утилит требуют ад-
министративных привилегий на целевом компьютере, так что потребуется
учетная запись, имеющая такие привилегии. Во-вторых, как будет говорить-
ся далее, в Windows Vista появились ограничения на использование локаль-
ных учетных записей для удаленного администрирования. Наконец, есть не-
сколько причин, относящихся только к PsExec, о которых будет говориться
в разделе, посвященном этой утилите.
Чтобы использовать другую учетную запись, укажите ее с параметром
командной строки –u, и если требуется, укажите пароль с параметром –p.
Например:
psinfo \\server1 -u ИМЯДОМЕНА\AdminAccnt -p Pass@word123
Если имя пользователя или пароль содержат пробелы, заключайте их в
двойные кавычки:
psinfo \\server1 -u “ИМЯДОМЕНА\Имя Пользователя» -p “Пароль с пробелами»
Если опустить параметр –p, утилита предложит ввести пароль. По со-
ображениям безопасности символы пароля не видны на экране при вво-
де с клавиатуры. Утилиты используют API WNetAddConnectoin2, так что
пароли не пересылаются по сети открытым текстом. (Однако в некоторых
случаях утилите PsExec приходится отправлять учетные данные уже после
аутентификации для создания нового сеанса; в этом случае учетные данные
отправляются без шифрования.)
Параметры –u и –p поддерживаются всеми утилитами PsTools, кроме
PsLoggedOn.
Решение проблем с удаленными подключениями PsTools
Для работы утилит PsTools на удаленных системах должны выполняться
некоторые условия. Очевидно, что требуется возможность подключения к
необходимым сетевым интерфейсам, для чего может понадобиться настрой-
SIN_ch_06.indd 172
27.12.2011 14:19:49

PsTools
Глава 6 173
ка соответствующих параметров брандмауэра и запуск служб. Большинство
утилит требует администраторских прав. Наконец, следует учитывать, что
средства контроля учетных записей пользователей (User Account Control,
UAC) ограничивают использование локальных учетных записей.
Базовое подключение
Если не указывается IP-адрес, необходимы средства разрешение имен. Если
служба DNS недоступна, можно использовать NetBIOS через TCP (NBT),
но для этого на брандмауэре целевой системы должны быть открыты порты
137 UDP, 137 TCP, 138 UDP и 139 TCP.
Некоторым утилитам необходим доступ к общей папке Admin$. Для
этого требуется включение совместного использования файлов и принте-
ров (служба Workstation [Рабочая станция] на локальной системе и служба
Server [Сервер] на целевой). Кроме того, брандмауэр не должен блокировать
порты, необходимые для поддержки общего доступа к файлам и принтерам,
а «простой общий доступ к файлам» должен быть отключен.
Некоторые утилиты требуют запуска службы Remote Registry (Удаленный
реестр) на целевой системе. (В таблице в конце главы указано, какие утили-
ты требуют этого.) Обратите внимание, что в последних версиях Windows
эта служба не запускается автоматически по умолчанию. Поэтому ее следует
запускать вручную или настроить ее автоматический запуск, прежде чем за-
пускать утилиты, работающие с ней.
Учетные записи пользователей
Большинство утилит требует прав администратора. До выпуска Windows
Vista и появления UAC с административными учетными записями было
все просто. Если учетная запись входила в группу Администраторы
(Administrators), все, что запускалось от имени этой учетной записи, полу-
чало администраторские права. После успешной аутентификации под учет-
ной записью из группы администраторов предоставлялся полный доступ к
системе.
В Windows Vista появился контроль учетных записей пользователей
(UAC), в котором, кроме всего прочего, была реализована концепция учет-
ных записей, одновременно являющихся и административными, и обычны-
ми пользовательскими. Такие учетные записи иногда называют защищенны-
ми администраторскими. Идея заключается в том, что программы запуска-
ются с привилегиями обычного пользователя, а если программа требует пол-
ных прав администратора, пользователь должен явно разрешить повышение
привилегий. Программы, запускаемые от имени пользователя, не должны
программно подтверждать повышение или другим способом обходить взаи-
модействие с пользователем. Если бы они могли это, разработчики приме-
няли бы такие обходные пути и продолжали писать программы, требующие
прав администратора, а не обычного пользователя.
SIN_ch_06.indd 173
27.12.2011 14:19:49

174 Часть
II
Работа с утилитами
Интерфейс «обратная петля» (loopback) — один из путей автоматическо-
го повышения прав, который блокируется в Windows Vista. Как описано в
статье 951016 базы знаний Knowledge Base, если устанавливается сетевое
подключение к удаленному компьютеру с использованием локальной учет-
ной записи из группы администраторов, предоставляются только привиле-
гии обычного пользователя. Так как это не интерактивный вход, нет возмож-
ности повысить права до полных администраторских. К учетным записям
домена это ограничение не применяется.
Это значит, что, хотя утилиты PsTools замечательно подходят для удален-
ного администрирования Windows XP и Windows Server 2003 с использова-
нием локальных учетных записей, такой подход не очень хорошо работает
в Windows Vista и последующих версиях. Если нельзя использовать домен-
ные учетные записи, прочитайте статью KB 951016, в которой рассказыва-
ется, как настроить параметр LocalAccountTokenFilterPolicy, чтобы убрать
ограничения на использование локальных учетных записей.
PsExec
Утилита PsExec позволяет выполнять произвольные процессы на одном или
нескольких удаленных компьютерах. PsExec перенаправляет потоки ввода-
вывода консольных приложений, так что они выглядят как запущенные
через сеанс Telnet. Таким образом, консольные утилиты, обычно работаю-
щие только на локальном компьютере, получают возможность удаленного
выполнения. В частности, эта возможность позволяет запускать оболочку
командной строки на удаленной системе и работать с ней как с локальной.
В отличие от большинства средств удаленного управления, PsExec не тре-
бует предварительной установки агентов или другого клиентского ПО на
целевом компьютере. Конечно, требуется учетная запись, авторизованная
для удаленного администрирования компьютера.
PsExec также позволяет запускать программы локально или удаленно от
имени учетной записи системы, как интерактивно, так и не интерактивно.
Например, можно запустить Regedit и просмотреть иерархию доступных
только учетной записи SYSTEM разделов реестра, таких как HKLM\SAM
и HKLM\Security. Как говорилось в главе 4, PsExec может запустить про-
грамму в неинтерактивном сеансе, который останется активным после вы-
хода пользователя из системы. PsExec предоставляет много других возмож-
ностей по управлению запуском локального или удаленного целевого про-
цесса, включая указание учетной записи, уровня привилегий, приоритета и
привязки к ЦП.
Команда для запуска процесса на удаленном компьютере имеет следую-
щий синтаксис:
psexec \\компьютер [параметры] программа [аргументы]
SIN_ch_06.indd 174
27.12.2011 14:19:49

PsTools
Глава 6 175
Например, чтобы запустить на удаленной системе команду ipconfig /all
и просмотреть ее выходные данные на локальном компьютере, выполните
следующую команду:
psexec \\server1 ipconfig /all
Чтобы запустить процесс на локальном компьютере, просто опустите па-
раметр \\computer:
psexec [параметры] программа [аргументы]
Если имя программы (часть программа) содержит пробелы, необходимо
заключить путь к программе в кавычки. Если удаленная командная строка
содержит специальные знаки, такие как символы канала или символы пере-
направления, используйте управляющий символ оболочки командной стро-
ки (^), чтобы локальная оболочка командной строки не обрабатывала эти
специальные символы. Приведем пример выполнения команды ipconfig /all
на компьютере server1 с перенаправлением стандартного выхода в файл C:\
ipconfig.out на целевой системе:
psexec \\server1 cmd.exe /c ipconfig /all ^> c:\ipconfig.out
Без управляющего символа (^) стандартный выход команды PsExec
(включая перенаправленный выход команды ipconfig) будет направлен в
файл c:\ipconfig.out на локальном компьютере. (Диагностические данные
PsExec записываются в стандартный поток вывода сообщений об ошибках, а
не стандартный выходной поток, так что при перенаправлении на локальную
систему захватываются только выходные данные удаленного процесса.)
Если в командной строке PsExec указано только имя файла (в части про-
грамма), этот файл будет записан на удаленной системе по пути, заданному
параметром Path. (Обратите внимание: изменения глобальной переменной
окружения PATH не видны службам до следующей перезагрузки.) Если ар-
гумент программа указывает абсолютный путь, буквы дисков должны со-
ответствовать таковым на удаленной системе. Например, C: будет указы-
вать на диск С: удаленной системы, а буквы сетевых дисков на локальном
компьютере или буквы дисков, подключенных во время пользовательского
сеанса, не будут распознаваться. Если нужной программы еще нет на уда-
ленной системе, PsExec может скопировать ее с локального компьютера на
удаленный (см. раздел «Параметры удаленного подключения» далее в этой
главе).
Завершение удаленного процесса
По умолчанию PsExec не завершает работу, пока не завершена работа про-
граммы, запущенной этой утилитой. Когда процесс завершает работу, он со-
общает операционной системе Код завершения, 32-разрядное целое число,
которое может быть считано родительским процессом (или любым другим
процессом, имеющим открытый описатель завершившегося процесса). Код
SIN_ch_06.indd 175
27.12.2011 14:19:49

176 Часть
II
Работа с утилитами
завершения часто используют, чтобы сообщить, успешно ли процесс вы-
полнил свою задачу. Ноль обычно указывает на успешное выполнение. Код
завершения проверяется командой IF ERRORLEVEL оболочки cmd и ее
условными операторами && и ||. PsExec выводит Код завершения процесса
в консоль (например, «Notepad.exe exited with error code 0»). После этого
PsExec завершает свою работу, указывая код завершения целевой програм-
мы в качестве собственного кода. Так родительскому процессу или пакетно-
му файлу удается проверить, успешно ли он завершился, и выполнить не-
обходимые действия по этому условию.
Когда используется параметр –d, PsExec запускает удаленный процесс,
но не ждет его завершения. При успешном запуске PsExec выводит иденти-
фикатор (PID) нового процесса в поток stderr и завершается, используя этот
идентификатор в качестве кода завершения. В пакетном файле этот иденти-
фикатор можно получить следующим образом:
psexec \\server1 -d App.exe
SET NEWPID=%ERRORLEVEL%
ECHO The Process ID for App.exe is %NEWPID%
Если же PsExec не может запустить удаленный процесс, код завершения
является кодом ошибки. Выяснить, является ли код завершения идентифи-
катором процесса или кодом ошибки, программным способом нельзя.
Перенаправление вывода консоли
Чтобы запустить оболочку командной строки на удаленной системе и рабо-
тать с ней на локальном компьютере, просто выполните команду следующе-
го вида:
psexec \\server1 Cmd.exe
При перенаправлении вывода консоли учитывайте следующее:
• операции, требующие знания содержимого экрана консоли, такого как
позиция курсора или цвет текста, не работают. Сюда входят команды cls
(очистка экрана) и more, а также табуляция имен файлов и папок;
• если запустить программу в новом окне, например, использовать коман-
ду start или запустить любую программу с графическим интерфейсом,
эта программа будет запущена на удаленном компьютере, но с ней нельзя
будет взаимодействовать;
• все утилиты Sysinternals, включая консольные утилиты, отображают
диалоговое окно с лицензионным соглашением при первом запуске под
новой учетной записью, если не добавить параметр командной строки /
accepteula. С учетом того, что написано в предыдущем пункте, это диало-
говое окно нельзя будет закрыть, а утилита будет ждать принятия согла-
шения, пока не будет закрыта нажатием Ctrl+C. При перенаправлении
выходных данных утилит Sysinternals используйте параметр /accepteula;
SIN_ch_06.indd 176
27.12.2011 14:19:50