カテゴリー別アーカイブ: Windows

LM ハッシュパスワードと NTLM ハッシュパスワードの生成

現代で NTLM ハッシュや LM ハッシュを使うこともそうそうないのだが、無線 LAN の PEAP 認証で mschap を利用する場合は必要となるので、手動生成する方法を調べてみた。

ハッシュの作り方説明は、Wikipedia の該当ページにある。

NTLM ハッシュについては、シェルスクリプトのワンライナーでも生成できる。
$ printf "pass_string" | iconv -f utf-8 -t utf-16le | openssl md4 | awk '{print $2}' | tr '[a-z]' '[A-Z]'

LM ハッシュの方はもう少し手順が面倒くさいので、ワンライナーでは無理な感じだ。車輪の再発明は避けて、既存のコードをもらってくることにする。

php によるコード
C によるコード (mkntpwdコマンド)
あたりをもらってくると良い。

また FreeRADIUS がインストールしてあれば、付属の smbencrypt コマンドが使えるはず。

Exchange Server が正常終了しなかった場合のデータベース復旧

Exchange Server の入ったサーバが、OSごと固まったり、ハードウェアトラブルで停止した場合の復旧方法を考えてみる。

ひとまずOSを立ち上げなおすことが出来たとして、Exchange Server を起動しようとするとデータベースが dirty shutdown 状態となっており、マウントできない場合がある。

こういう場合にマイクロソフトの提供している手順ドキュメントがあるのだが…
修復済みの Exchange データベースのサポート ポリシーの変更

上記ドキュメントの手順3を進める前にデータベースをマウントする必要がある。しかし手順1、2でデータベースを掃除したにもかかわらず、それでもマウントできないということもある。

実行例:

[PS] C:\Windows\system32> Mount-Database -Identity MailboxDB01 -force
データベース "MailboxDB01" をマウントできませんでした。エラー: Active Manager
 の操作に失敗しました。エラー: データベース操作が失敗しました。エラー:
 操作が失敗し、メッセージが生成されました:
 MapiExceptionDatabaseError: Unable to mount database. (hr=0x80004005, ec=1108)
Diagnostic context:
...

そういう場合はトランザクションログが壊れている可能性が高いので、ログファイルを削除(退避)するとよい。

トランザクションログファイルの状態を示すコマンドとして、eseutil /ml コマンドがある。

[PS] C:\Windows\system32> eseutil /ml D:\Exchange\MailboxDB01\E00

これで壊れているログファイルがどれなのかわかるが、ともかくデータベースと同一ディレクトリにある拡張子.logのファイル(拡張子を隠す設定になっていたら表示すること!)をすべて別フォルダに退避してからマウントコマンドを実行するとよい。

[PS] C:\Windows\system32> D:
[PS] D:\> cd \Exchange\MailboxDB01
[PS] D:\Exchange\MailboxDB01> mkdir backup
[PS] D:\Exchange\MailboxDB01> move *.log backup
[PS] D:\Exchange\MailboxDB01> Mount-Database -Identity MailboxDB01 -force

Azure PowerShellの準備

環境:Windows10 Pro 1703 64bitで確認。

まずローカルWindowsで管理者権限のPowerShellウインドウを開き、AzureRMモジュールをインストールする。

PS C:\WINDOWS\system32> Install-Module AzureRM

信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを
信頼する場合は、Set-PSRepository コマンドレットを実行して、リポジトリの InstallationPolicy 
の値を変更してください。'PSGallery' からモジュールをインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y
(Enterを押す)

あとは自動的にモジュールがインストールされる。

次に管理者権限PowerShellを閉じ、一般権限のPowerShellを開く。

Microsoftアカウントでログインする。

PS C:\Users\username> Login-AzureRmAccount

ポップアップウインドウが表示されるので、そこにユーザ名とパスワードを入力する。

これで準備完了なので、以下やりたいことを実行する。

参考URL:
Azure PowerShell のインストールおよび構成
Azure PowerShell と Resource Manager でリソースを管理する

Windows 8 or 8.1 で「ネットワークの場所」を変更する

Windows 7 ではネットワークと共有センターからネットワークの場所を変更できたが、8 (8.1) では変更できない。

Windows 8.1 の場合、チャームから「PC 設定」→「ネットワーク」→「接続」→該当ネットワークをクリックして、「デバイスとコンテンツの検索」スイッチのオンオフでパブリック/プライベートを変更できる。Windows 8 の場合は参考URLを参照。

しかし、SIM スロット付き Windows 8.1 タブレットのように直接 WAN ポート (Windows 上の用語では「モバイル ブロードバンド」) を持っている場合、WAN ポートについては「デバイスとコンテンツの検索」のスイッチが表示されないため、直接レジストリを編集して変更する必要がある。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles の下の、該当するネットワークのSIDキーを選択し、その下の「Category」を変更する。
0: パブリック
1: プライベート
となる。

参考URL:
Windows 8のネットワークの場所やネットワーク名の変更 – Windowsのメモ書き

※そもそも WAN ポートのポリシーを切り替える必要はないだろう、と思われるかもしれないが、WAN ポートを使って VPN 接続し、VPN ポートを「プライベート」に切り替えると、自動的に WAN ポートもプライベート設定になってしまうという妙な動作をしてしまう(おそらく Windows 8.1 のバグ)。WAN ポートをパブリックに戻すためには、上記のレジストリ操作が必要になる。

WindowsクライアントPCへドメインユーザでリモートデスクトップ接続したい

Windows Server 2008R2 サーバ群と Windows 7 クライアント群で構成されている Windows ドメインネットワークで、サーバへではなくクライアントPCへリモートデスクトップ接続をしたい場合のメモ。

リモートデスクトップの設定を有効にしても、Administrator以外のドメインユーザでログオンしようとすると「このユーザー アカウントはリモート ログインを許可されていないため、接続は拒否されました。」と表示されてしまってログオンできない。

この場合は、クライアントOS側の「リモートデスクトップ接続を許可するユーザ」に、そのドメインユーザを追加してやらねばならない。

「システムのプロパティ」→「リモート」タブを開き、右下の「ユーザーの選択」をクリックする。

1

「追加」ボタンでユーザーまたはグループを選択するが、ここでは「Builtin」OUに所属するグループは選択できない。よって、サーバーへログオンできる「Remote Desktop Users」グループをここに追加することはできない。今回は「Domain Users」グループを利用して、ドメインユーザ全てがログオンできるようにした。

2

こういう設定は Windows に詳しい人なら常識なのだろうが、不勉強なためにハマってしまった。これ、グループポリシーで全体に設定できないのだろうか…?