Задача: завершить работу компьютера под управлением ОС MS Windows XP/2003, используя удалённое сетевое подключение, инициируемое ОС под управлением Debian GNU/Linux.
Предположим, что нам нужно не просто один раз остановить компьютер под управлением MS Windows XP/2003, а обеспечить возможность в любое время повторить эту операцию, не компрометируя при этом реквизиты учётных записей, имеющих административные привилегии (только они, в отличии от обычных пользователей, по умолчанию могут завершать работу серверных вариантов ОС).
Займёмся предварительной подготовкой.
Всё, что нужно сделать на стороне Debian GNU/Linux, так это установить пакет утилит, предназначенных для обращений к ресурсам SMB и CIFS. В частности, с помощью утилиты "net" из устанавливаемого набора мы будем посылать ОС MS Windows XP/2003 команду завершения работы:
# aptitude install samba-client
Для того, чтобы ОС MS Windows XP/2003 приняла команду завершения работы от удалённого сетевого узла, используя при этом непривилегированную учётную запись, следует провести небольшую подготовку, о которой далее, поэтапно:
Заводим на сервере выделенного только для завершения работы системы пользователя, например: shutdowner (задав ему какой-нибудь пароль, разумеется);
С помощью консоли администрирования "Администрирование" => "Локальные параметры безопасности" ограничим пользователя в возможностях, дав ему, тем не менее, право завершать работу ОС, добавив в следующие списки:
Запретить вход в систему через службу терминалов;
Завершение работы системы;
Отказать во входе в качестве службы;
Отклонить локальный вход;
Принудительное удалённое завершение.
Если это MS Windows XP, то отключаем поддержку так называемого "простого общего доступа к файлам", путём дезактивации соответствующего "чекбокса" "Пуск" => "Настройка" => "Панель управления" => "Свойства папки" => "Вид" => "Использовать простой общий доступ к файлам";
Включаем "службу доступа к файлам и принтерам сетей MS" путём активации соответствующего "чекбокса" "Пуск" => "Настройка" => "Панель управления" => "Сетевые подключения" => "Подключение по локальной сети" => "Свойства" => "Служба доступа к файлам и принтерам сетей MS";
Если включена служба "Windows Firewall", то по адресу "Пуск" => "Настройка" => "Панель управления" => "Брандмауер Windows" => "Исключения" разрешаем входящие подключения "Службы доступа к файлам и принтерам сетей MS", и там-же, на вкладке "ICMP" разрешаем входящие запросы.
С помощью консоли администрирования "Администрирование" => "Локальные параметры безопасности" ограничим пользователя в возможностях, дав ему, тем не менее, право завершать работу ОС, добавив в следующие списки:
Запретить вход в систему через службу терминалов;
Завершение работы системы;
Отказать во входе в качестве службы;
Отклонить локальный вход;
Принудительное удалённое завершение.
Если это MS Windows XP, то отключаем поддержку так называемого "простого общего доступа к файлам", путём дезактивации соответствующего "чекбокса" "Пуск" => "Настройка" => "Панель управления" => "Свойства папки" => "Вид" => "Использовать простой общий доступ к файлам";
Включаем "службу доступа к файлам и принтерам сетей MS" путём активации соответствующего "чекбокса" "Пуск" => "Настройка" => "Панель управления" => "Сетевые подключения" => "Подключение по локальной сети" => "Свойства" => "Служба доступа к файлам и принтерам сетей MS";
Если включена служба "Windows Firewall", то по адресу "Пуск" => "Настройка" => "Панель управления" => "Брандмауер Windows" => "Исключения" разрешаем входящие подключения "Службы доступа к файлам и принтерам сетей MS", и там-же, на вкладке "ICMP" разрешаем входящие запросы.
Всё, подготовка завершена. Теперь из командной строки ОС Debian GNU/Linux посылаем ОС MS Windows XP/2003 указание завершить работу:
# net rpc SHUTDOWN -f -t 10 -C "Shutdown comes from me" -U shutdowner%password -I xxx.xxx.xxx.xxx -p 445
Где:
SHUTDOWN - операнд, определяющий действие;
-f - указание принудительно завершать работу приложений;
-t 10 - задаём промежуток времени (в секундах), после которого операционная система приступит к завершению работы;
-C "Shutdown comes from me" - задаём текст сообщения, которое будет показано всем пользователям завершающей работы целевой системы;
-U shutdowner%password - открытым текстом указываем логин и пароль пользователя, который имеет достаточно полномочий, для завершения работы целевой системы;
-I xxx.xxx.xxx.xxx - указываем IP-адрес целевой системы;
-p 445 - указываем порт целевой системы, который прослушивается SMB или CIFS подсистемой (параметр необязательный, если его не указывать, то утилита попробует обратится вначале к 445 порту, а потом к 139).
-f - указание принудительно завершать работу приложений;
-t 10 - задаём промежуток времени (в секундах), после которого операционная система приступит к завершению работы;
-C "Shutdown comes from me" - задаём текст сообщения, которое будет показано всем пользователям завершающей работы целевой системы;
-U shutdowner%password - открытым текстом указываем логин и пароль пользователя, который имеет достаточно полномочий, для завершения работы целевой системы;
-I xxx.xxx.xxx.xxx - указываем IP-адрес целевой системы;
-p 445 - указываем порт целевой системы, который прослушивается SMB или CIFS подсистемой (параметр необязательный, если его не указывать, то утилита попробует обратится вначале к 445 порту, а потом к 139).
Если подключение к удалённой системе состоялось и сигнал к завершению успешно отправлен и принят, то нас порадуют следующим сообщением:
Shutdown of remote machine succeeded
В противном случае, что-то вроде этого, если целевая система не принимает подключений:
Could not connect to server xxx.xxx.xxx.xxx
...или такого, если используемый пользователь не имеет достаточно прав для завершения работы системы:
Could not initialise pipe \winreg. Error was NT_STATUS_OBJECT_NAME_NOT_FOUND
Уведомления об ошибках "говорящие", интерпретировать их труда не составит.