cygwin sshd が動かない・・・

windows のサービスで起動しても、

cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062:
The service has not been started.

のようなメッセージが出て起動できない。
ググると、ディレクトリ/ファイルのパーミッション、ownerが適切でない場合にこのエラーが出るとのことなので、/var/log や /etc/ssh_* のパーミッションを777に、owner を SYSTME:root にしてみたが駄目。


※ ちなみに、sshdを起動する以前の問題で、ssh-host-config の時に「/var/logのパーミッションが駄目」みたいなメッセージが出た。
/var/log のパーミッションを777にすればよいのだが、この時、/var/log だけでなく、/var/ のパーミッションも777にしなきゃだめ。


さて、sshd起動エラーだが、いろいろ調べていると、「FilemonNT を使って調べてみたら?」というコメントがあった。
FilemonNT というのは、以前、MSがフリーで提供していたツールで、今は、ProcessMonitor というツールに統合されている。
ProcessMonitorは、Windows上で動作する任意のプロセスについて、レジストリやファイル(dllも含む)のオープン・クローズの履歴をモニタできるというものだ。

サービスから起動するのではなく、「sshd -d」で起動すると、ProcessMonitor で追跡できた。
調べたところ、「cygwrap-0.dll」というdllを開こうとしてエラーになった後、プロセスが終了している。
cygwrap-0.dll は、NETカテゴリの下の「libwrap0」というパッケージに入っている。
libwrap0 をインストールしてからリトライするも、やはり駄目。

sshd -d で起動すると、こんどは「/var/empty のowner、パーミッションが駄目」的なことを言われる。
最終的に、以下のようなパーミッションにして、windows サービスから起動すると起動できた!

$ ll -d /var/empty/
d--x------+ 2 SYSTEM none 0 Feb 14 02:08 /var/empty/

しかし、このパーミッションだと、sshd -d では起動できない。
hase ユーザで実行しているからだろう。