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 sambasamba自身の設定やサービスを動かしておく必要はありません。
一緒に導入されるコマンドを使います。 コマンドを実行する前に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/netnetコマンドのうち、サービスに関するコマンドを抜き出してみます。
# 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サービスを止めたり動かしたりでき便利
- セキュリティ面では気をつける必要あり
- 比較的手間がかからない