はじめに
CygwinはPosix機能以外にPostgreSQLやApacheなどのLAMPを構成するサーバも提供している。
これらのサーバをバックグラウンドで実行するには、サーバに代ってセキュリティ・アービトレーションを実施するCygserverの起動が不可欠である。
問題
通常、CygserverをWindowsのブート時に自動起動するよう設定する。
Cygserverは、セキュリティ・アービトレーション以外にも、Caching account informationの以下の記載にあるようにアカウントのキャッシュを行う。
If cygserver is running it will provide passwd and group entry caching for all processes in every Cygwin process tree started after cygserver. So, if you start a Cygwin Terminal and cygserver is running at the time, mintty, the shell, and all child processes will use cygserver caching.
Windowsがスタンドアローンの運用であれば、このアカウント・キャッシュが悪さをすることはないのだろう。
しかし、Active DirectoryなどのDomainに属しているWindowsでCygserverをブート時に自動起動した場合、Windowsのログインに使用するドメイン・ユーザのアカウントがCygserverの起動時にキャシュされない。この場合、ログイン後、Cygwin Terminalの起動に失敗する。
対処
以下の手順を踏むことで、この問題に対処することができる。
- Cygserverの停止
- /etc/passwd、/etc/groupを作成
- /etc/nsswitch.confの編集
- Cygserverの再開
以降にそれぞれの詳細を記す。
1. Cygserverの停止
-
管理者権限でpowershellを起動
-
stop-serviceコマンドレットでCygserverを停止
Stop-Service cygserver
-
set-serviceコマンドレットでCygserverの自動起動を停止
Set-Service -StartupType Disabled cygserver
-
Windowsの再起動
2. /etc/passwd、/etc/groupを作成
上記手順の結果、Windowsの再起動後にCygwin Terminalが起動可能となる。
Cygwin Terminalを起動した後、以下のコマンドを実行して、passwdファイルと
groupファイルを作成する。
$ mkpasswd -c -l > /etc/passwd
$ mkgroup -c -l > /etc/group
3. /etc/nsswitch.confの編集
Nave Service Switchがpasswdとgroupのアカウント情報を検索する優先順位に、上記で作成したファイルを第一優先となるように設定する。
-
変更前
# passwd: files db # group: files db
-
変更後
passwd: files # db group: files # db
なお、nsswitch.confの変更を有効にするには、サービスも含めた全Cygwinアプリの再起動が必要となる。この仕様については、The /etc/nsswitch.conf fileに以下のように記載がある。
The /etc/nsswitch.conf file is read exactly once by the first process of a Cygwin process tree. If there was no /etc/nsswitch.conf file when this first process started, then no other process in the running Cygwin process tree will try to read the file.
If you create or change /etc/nsswitch.conf, you have to restart all Cygwin processes that need to see the change. If the process you want to see the change is a child of another process, you need to restart all of that process's parents, too.
4. Cygserverの再開
-
管理者権限でpowershellを起動
-
set-serviceコマンドレットでCygserverの自動起動を再設定
Set-Service -StartupType Automatic cygserver
-
Windowsの再起動
cygserverの再起動によるアカウント・キャッシュの構成だけでなく、nsswitch.confの変更を反映する意味も持つ