Twitter まとめ 2014-02-02

Views: 8

カテゴリー: Twitterまとめ | コメントする

LinuxからWMI経由でWindowsの情報を取得/プログラム実行してみる

Linuxから、WMI経由でWindowsの情報を取得できるツールがあったので試してみた。

これと、ZABBIXとうまく連携できれば、(SNMP経由でない)本当のエージェントレスができそう。

インストール方法は以下の通り

# wget http://www.orvant.com/files/packages/source/wmi_1.3.14.orig.tar.bz2
# bzip2 -cd wmi_1.3.14.orig.tar.bz2 | tar xvf -
# cd wmi-1.3.14
# make

ここで、以下のメッセージが出る場合は、
/bin/sh: line 2: ./configure: そのようなファイルやディレクトリはありません
yumで autoconfをインストールして、再度makeします。

# yum install autoconf
# make

makeには結構時間かかります。

make install前に動作確認します。

# ./Samba/source/bin/wmic Usage: [-?|--help] [--usage] [-d|--debuglevel DEBUGLEVEL] [--debug-stderr] [-s|--configfile CONFIGFILE] [--option=name=value] [-l|--log-basename LOGFILEBASE] [--leak-report] [--leak-report-full] [-R|--name-resolve NAME-RESOLVE-ORDER] [-O|--socket-options SOCKETOPTIONS] [-n|--netbiosname NETBIOSNAME] [-W|--workgroup WORKGROUP] [--realm=REALM] [-i|--scope SCOPE] [-m|--maxprotocol MAXPROTOCOL] [-U|--user [DOMAIN\]USERNAME[%PASSWORD]] [-N|--no-pass] [--password=STRING] [-A|--authentication-file FILE] [-S|--signing on|off|required] [-P|--machine-pass] [--simple-bind-dn=STRING] [-k|--kerberos STRING] [--use-security-mechanisms=STRING] [-V|--version] [--namespace=STRING] [--delimiter=STRING] //host query Example: wmic -U [domain/]adminuser%password //host "select * from Win32_ComputerSystem" [root@zabbix2 wmi-1.3.14]#

 

試しに、情報を取得してみます。

Windowsの情報を取得

# ./Samba/source/bin/wmic -U username%password //192.168.29.40 "Select * From Win32_ComputerSystem"

CLASS: Win32_ComputerSystem
AdminPasswordStatus|AutomaticResetBootOption|AutomaticResetCapability|BootOptionOnLimit|BootOptionOnWatchDog|BootROMSupported|BootupState|Caption|ChassisBootupState|CreationClassName|CurrentTimeZone|
DaylightInEffect|Description|Domain|DomainRole|EnableDaylightSavingsTime|FrontPanelResetStatus|InfraredSupported|InitialLoadInfo|InstallDate|KeyboardPasswordStatus|LastLoadInfo|Manufacturer|Model|Name|
NameFormat|NetworkServerModeEnabled|NumberOfLogicalProcessors|NumberOfProcessors|OEMLogoBitmap|OEMStringArray|PartOfDomain|PauseAfterReset|PowerManagementCapabilities|PowerManagementSupported|
PowerOnPasswordStatus|PowerState|PowerSupplyState|PrimaryOwnerContact|PrimaryOwnerName|ResetCapability|ResetCount|ResetLimit|Roles|Status|SupportContactDescription|SystemStartupDelay|SystemStartupOptions|
SystemStartupSetting|SystemType|ThermalState|TotalPhysicalMemory|UserName|WakeUpType|Workgroup
1|True|True|3|3|True|Normal boot|XP-VMCLIENT|3|Win32_ComputerSystem|540|False|AT/AT COMPATIBLE|NSB-LAN|0|True|3|False|NULL|(null)|3|(null)|VMware, Inc.|VMware Virtual Platform|XP-VMCLIENT|(null)|True|3|1|
NULL|([MS_VM_CERT/SHA1/27d66596a61c48dd3dc7216fd715126e33f59ae7],Welcome to the Virtual Machine)|False|3932100000|NULL|False|0|0|3|(null)|his|1|-1|-1|
(LM_Workstation,LM_Server,NT,Potential_Browser,Backup_Browser,Master_Browser)|OK|NULL|30|("Microsoft Windows XP Professional" /noexecute=optin /fastdetect)|0|X86-based PC|3|3220676608|XP-VMCLIENT\j-masuda|6|
(null)

特定のプロセスの情報を取得(EpgTimerSrv.exe)

# ./Samba/source/bin/wmic -U username%password //192.168.29.40 "Select * From Win32_Process where Caption='EpgTimerSrv.exe'"
CLASS: Win32_Process
Caption|CommandLine|CreationClassName|CreationDate|CSCreationClassName|CSName|Description|ExecutablePath|ExecutionState|Handle|HandleCount|InstallDate|KernelModeTime|MaximumWorkingSetSize|
MinimumWorkingSetSize|Name|OSCreationClassName|OSName|OtherOperationCount|OtherTransferCount|PageFaults|PageFileUsage|ParentProcessId|PeakPageFileUsage|PeakVirtualSize|PeakWorkingSetSize|Priority|
PrivatePageCount|ProcessId|QuotaNonPagedPoolUsage|QuotaPagedPoolUsage|QuotaPeakNonPagedPoolUsage|QuotaPeakPagedPoolUsage|ReadOperationCount|ReadTransferCount|SessionId|Status|TerminationDate|ThreadCount|
UserModeTime|VirtualSize|WindowsVersion|WorkingSetSize|WriteOperationCount|WriteTransferCount
EpgTimerSrv.exe|C:\wintool\HDP2\EpgDataCap_Bon\EpgTimerSrv.exe|Win32_Process|20140125092622.282684+540|Win32_ComputerSystem|XP-VMCLIENT|EpgTimerSrv.exe|C:\wintool\HDP2\EpgDataCap_Bon\EpgTimerSrv.exe|0|11484|
115|(null)|773593750|1413120|204800|EpgTimerSrv.exe|Win32_OperatingSystem|Microsoft Windows XP Professional|C:\WINDOWS|\Device\Harddisk0\Partition1|9817532|161060012|174899|23060480|1020|31715328|78991360|
35393536|8|23060480|11484|4808|65884|6256|70172|36078|76863544|0|(null)|(null)|11|713750000|76890112|5.1.2600|27054080|974246|225966796
[root@zabbix2 wmi-1.3.14]#

特定のプロセスの情報を取得(値の行のみ)

# wmic -U username%password //192.168.29.40 "Select * From Win32_Process where Caption='EpgTimerSrv.exe'" | tail -n +3
EpgTimerSrv.exe|C:\wintool\HDP2\EpgDataCap_Bon\EpgTimerSrv.exe|Win32_Process|20140125092622.282684+540|Win32_ComputerSystem|XP-VMCLIENT|EpgTimerSrv.exe|C:\wintool\HDP2\EpgDataCap_Bon\EpgTimerSrv.exe|0|11484|
114|(null)|889218750|1413120|204800|EpgTimerSrv.exe|Win32_OperatingSystem|Microsoft Windows XP Professional|C:\WINDOWS|\Device\Harddisk0\Partition1|11744618|191886458|212378|25841664|1020|32411648|78991360|
36548608|8|25841664|11484|4648|65852|6256|70172|45978|111959645|0|(null)|(null)|9|822812500|74792960|5.1.2600|29843456|1082336|259218725

動作確認したら、インストールします。

# make istall
# whereis wmic
wmic: /bin/wmic

RPMもあるっぽい(けど、まだ試していません)
http://www.harumaki.net/2012/05/09/centos%E3%81%ABwmi%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%82%8B/

ちなみに、ファイルの情報を取得する場合は以下の様にします。

# wmic -U username%password //192.168.29.40 "Select * From CIM_DataFile Where Name = 'c:\\\temp\\\test.txt'"
CLASS: CIM_DataFile
AccessMask|Archive|Caption|Compressed|CompressionMethod|CreationClassName|CreationDate|CSCreationClassName|CSName|Description|Drive|EightDotThreeFileName|Encrypted|EncryptionMethod|Extension|FileName|FileSize|FileType|FSCreationClassName|FSName|Hidden|InstallDate|InUseCount|LastAccessed|LastModified|Manufacturer|Name|Path|Readable|Status|System|Version|Writeable
18809343|True|c:\temp\test.txt|False|(null)|CIM_LogicalFile|20140126190415.202647+540|Win32_ComputerSystem|XP-VMCLIENT|c:\temp\test.txt|c:|c:\temp\test.txt|False|(null)|txt|test|0|テキスト ドキュメント|Win32_FileSystem|NTFS|False|20140126190415.202647+540|0|20140126190415.202647+540|20140126190415.202647+540|(null)|c:\temp\test.txt|\temp\|True|OK|False|(null)|True

なぜか、\ -> \\\に変換しないと、エラーになります(\\ではダメ)。
それと、ファイルパスに2バイト文字を含むような場合も失敗しますが、こちらはまだ未解決。
フォルダ単位で各ファイル全部をWMIで取得して後からGrepで文字列抽出するのならいけましたが、とりあえずこれで。

 

なお、接続先がWindows Vista,2008以降だとセキュリティーがきびしくなっているので、
UACを無効にするか、ローカルのAdministratorもしくは、管理者権限を持ったドメインユーザで接続する必要があるようです。

UACはGUIで設定するか、レジストリを変更して再起動します。

HKLM¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Policies¥System\EnableLUA

DWORD:0

UACを無効にできるのであれば一番早いですが、そのままだと管理者権限を持ったローカルユーザで接続しても接続を拒否られる場合は、以下のレジストリを作成・変更してみてください。
再起動は不要らしいです。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy

DWORD:1

 

その他接続できない場合は次の点を確認してみてください。
(Administratorsグループのユーザであれば、Firewall以外はデフォルトでは大丈夫なはずですが・・・)

・Firewallの設定

WindowsFireWallが有効の場合は以下の項目を有効にします。
[標準プロファイル]or[ドメインプロファイル]
・[Windowsファイアウォール:リモート管理の例外を許可する](2003)
・[Windowsファイアウォール:着信リモート管理の例外を許可する](2008以降)

・サービスの起動確認
Windows Management Instrumentationサービス(サービス名:WinMgmt)が
起動しているかの確認

・DCOMのアクセス権限(接続元)

dcomcnfg.exeを起動し、
コンポーネントサービス->コンピュータ->マイコンピュータのプロパティーを開き、
・[既定のプロパティ]タブを選択して,[このコンピュータ上で分散COMを有効にする]が
チェックされているか確認する。

 

・DCOMのアクセス権限(接続先)

dcomcnfg.exeを起動し、
コンポーネントサービス->コンピュータ->マイコンピュータのプロパティーを開き、
・[既定のプロパティ]タブを選択して,[このコンピュータ上で分散COMを有効にする]が
チェックされているか確認する。
・[COMセキュリティ]タブを選択して、[制限の編集]から接続ユーザで
アクセス許可されているかを確認する。

 

・WMIの名前空間のセキュリティーの確認

wmimgmt.mscを起動し、WMIコントロールでプロパティーを表示し、
セキュリティタブのRoot->CIMV2のセキュリティーを確認します。
接続ユーザでアクセス許可されていることを確認します。
どうしてもうまくいかない場合でUACのセキュリティ機能が有効の場合は、
ユーザー自身に対して設定するか、
UsersグループとAdministratorsグループ以外のユーザーが属するグループに対して
設定してみてください。

 

 

 

なお、一緒に、winexeというツールもインストールされます。
これは、Linux側のコマンドラインからWindows上でプログラムを実行するものです。
基本的には、以下のコマンド実行できます。

# winexe -U username%password //192.168.29.40 "ipconfig"
Windows IP Configuration
Ethernet adapter ローカル エリア接続 5:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.29.40
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.29.1

Ethernet adapter ローカル エリア接続 7:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.30.40
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :

ただ、実行時以下のようにエラーが出ることがあります。

 [winexe/winexe.c:120:on_ctrl_pipe_error()] ERROR: Failed to install service winexesvc - NT code 0x00000424

その場合は、対象のWindows側で、以下のコマンドを実行しておけばよいようです。(参考:http://community.zenoss.org/people/chitambira/blog)

sc create winexesvc binPath= C:\WINDOWS\WINEXESVC.EXE start= auto DisplayName= winexesvc
sc description winexesvc "Remote command provider for Zenoss monitoring"

ちなみにこれ、バグだそうで、
winexe/service.c ファイルの以下の部分を修正して、
再度make&make installすれば治るようです。

#define NT_STATUS_SERVICE_DOES_NOT_EXIST NT_STATUS(0xc0000424)
↓
#define NT_STATUS_SERVICE_DOES_NOT_EXIST NT_STATUS(0x00000424)

実際やってみたら、ちゃんと自動でWindows側にサービスが登録され、リモート実行できるようになりました。

また、以下のようにメッセージが出た場合は、

ERROR: Failed to install service winexesvc - NT_STATUS_UNSUCCESSFUL

いったん、次のコマンドを入れると解決できる場合もあるそうです

sc delete winexesvc

なお、上記winexeはバージョン0.80ですが、、最新版(1.00)が出ているんので、必要があればこちらを
http://sourceforge.net/projects/winexe/files/

インストール方法はこちらを参考に

winexe(1.00)のインストール

Views: 102

カテゴリー: Linux, Windows, Zabbix, ツール | タグ: | コメントする

Twitter まとめ 2014-02-01

  • EDCBのWebインターフェイスのkkcaldだけど、最新のChromeだとレイアウトが崩れるようになったでござる。とりあえずIETabプラグインでIEで自動表示させて回避中。 19:43:27, 2014-02-01
  • Twitter をファイルシステムとしてマウントとはその発想はなかった。 http://t.co/HOSaFJKOpd 20:48:40, 2014-02-01

Views: 7

カテゴリー: Twitterまとめ | コメントする