LinuxサーバからWindowsサービスを止めたり動かしたりする

記事タイトルとURLをコピーする
Windows Serverで動くサービスを外部から止めたり、動かしたりしたい。
そういう必要に迫られたことがありましたので、こちらに残しておきます。

どうやるか?

「外部から」はLinuxサーバを使います。AWSでやってますので、Amazon Linuxを使います。
LinuxサーバからWindows Serverで動くサービスに何かするには、MS-RPC(Microsoft Remote Procedure Call)を使えばできそうと分かりました。(以下、RPCと記述します)
LinuxサーバでRPCを使うためにはsambaを導入すればできるようです。

sambaの導入

Amazon Linuxにsambaを導入するにはyum一発で済むかと思いきやうまくいきません。
下記のようにやります。
# cd /etc/yum.repos.d/
# wget http://ftp.sernet.de/pub/samba/3.5/centos/6/sernet-samba.repo
# yum install samba
samba自身の設定やサービスを動かしておく必要はありません。
一緒に導入されるコマンドを使います。 コマンドを実行する前にSecurity Groupもしくはファイアウォールを通すように設定します。
使うポートは下記のようです。   TCP 135,137,139,445
  UDP 137,138,445,あと動的にRPCの待受するポート 今回は、対象のWindows ServerとWindows Serverに何かするLinuxサーバはVPCの同一Subnetにあり、また、検証ということで、ローカルに対して気軽に開けています。
セキュリティを配慮してこの設定は慎重に行なってください。
「動的に」が困る場合は、レジストリをいじることで動的範囲を固定にできるようです。

Windows サービスを止めたり動かしたり

netコマンドを使います。
# which net
/usr/bin/net
netコマンドのうち、サービスに関するコマンドを抜き出してみます。
# net rpc service
Invalid command: net rpc service
Usage:
net rpc service list            View configured Win32 services
net rpc service start           Start a service
net rpc service stop            Stop a service
net rpc service pause           Pause a service
net rpc service resume          Resume a paused service
net rpc service status          View current status of a service
net rpc service delete          Delete a service
net rpc service create          Create a service
対象のWindows Serverに登録されているサービスをリストアップしてみます。
# net rpc service list -I 10.100.40.36 -U Administrator  ←対象のWindows Server 10.100.40.36 に サービス一覧 を Administrator で実行します
Enter Administrator's password:  ←Administrator のパスワードを入力します
AeLookupSvc             "Application Experience"
ALG                     "Application Layer Gateway Service"
AppIDSvc                "Application Identity"
 :
 :
(中略)
 :
 :
Tomcat7                 "Apache Tomcat 7.0 Tomcat7"
postgresql-x64-9.0      "postgresql-x64-9.0"
試しにTomcatのサービスの稼動状態を見てみます。
# net rpc service status Tomcat7 -I 10.100.40.36 -U Administrator%XXXXXX  ←Administratorの後に「%」をつけてパスワードをつけるとパスワードを訊かれずに実行できます
Tomcat7 service is running.
Configuration details:
    Controls Accepted    = 0x1
    Service Type         = 0x10
    Start Type           = 0x2
    Error Control        = 0x1
    Tag ID               = 0x0
    Executable Path      = "C:Program FilesApache Software FoundationTomcat 7.0binTomcat7.exe" //RS//Tomcat7
    Load Order Group     =
    Dependencies         = Tcpip/Afd/
    Start Name           = LocalSystem
    Display Name         = Apache Tomcat 7.0 Tomcat7
稼働してますので「running」と表示されます。 このTomcatを停止させてみます。
# net rpc service stop Tomcat7 -I 10.100.40.36 -U Administrator%XXXXXX
..............................
Tomcat7 service is Unknown State [0].
停止できたか確認します。
# net rpc service status Tomcat7 -I 10.100.40.36 -U Administrator%%XXXXXX
Tomcat7 service is stopped.
Configuration details:
    Controls Accepted    = 0x0
    Service Type         = 0x10
    Start Type           = 0x2
    Error Control        = 0x1
    Tag ID               = 0x0
    Executable Path      = "C:Program FilesApache Software FoundationTomcat 7.0binTomcat7.exe" //RS//Tomcat7
    Load Order Group     =
    Dependencies         = Tcpip/Afd/
    Start Name           = LocalSystem
    Display Name         = Apache Tomcat 7.0 Tomcat7
stopped」と表示されて止まっているようです。 停止させたTomcatを稼働させます。
# net rpc service start Tomcat7 -I 10.100.40.36 -U Administrator%%XXXXXX
..............................
Failed to start service: Tomcat7 [WERR_OK]
Tomcatが稼働したか確認します。
# net rpc service status Tomcat7 -I 10.100.40.36 -U Administrator%XXXXXX
Tomcat7 service is running.
Configuration details:
    Controls Accepted    = 0x1
    Service Type         = 0x10
    Start Type           = 0x2
    Error Control        = 0x1
    Tag ID               = 0x0
    Executable Path      = "C:Program FilesApache Software FoundationTomcat 7.0binTomcat7.exe" //RS//Tomcat7
    Load Order Group     =
    Dependencies         = Tcpip/Afd/
    Start Name           = LocalSystem
    Display Name         = Apache Tomcat 7.0 Tomcat7
running」と表示されてますので稼働しているようです。

「net rpc service」以外のnet rpc コマンド

net rpc service」以外にもコマンドはあります。
# net help rpc
Usage:
net rpc audit
    Modify global audit settings
net rpc info
    Show basic info about a domain
net rpc join
    Join a domain
net rpc oldjoin
    Join a domain created in server manager
net rpc testjoin
    Test that a join is valid
net rpc user
    List/modify users
net rpc password
    Change a user password
    Alias for net rpc user password
net rpc group
    List/modify groups
net rpc share
    List/modify shares
net rpc file
    List open files
net rpc printer
    List/modify printers
net rpc changetrustpw
    Change trust account password
net rpc trustdom
    Modify domain trusts
net rpc abortshutdown
    Abort a remote shutdown
net rpc shutdown
    Shutdown a remote server
net rpc samdump
    Dump SAM data of remote NT PDC
net rpc vampire
    Sync a remote NT PDC's data into local passdb
net rpc getsid
    Fetch the domain sid into local secrets.tdb
net rpc rights
    Manage privileges assigned to SID
net rpc service
    Start/stop/query remote services
net rpc registry
    Manage registry hives
net rpc shell
    Open interactive shell on remote server
メジャーなところでは「net rpc shutdown」でしょうか。
いろいろできそうです。

まとめ

  • LinuxからWindowsサービスを止めたり動かしたりでき便利
  • セキュリティ面では気をつける必要あり
  • 比較的手間がかからない