"Cygwin の初期設定"でこのページの内容を一気に実施できるようにしましたので、
2003/05/17 の更新を最後にこのページの更新は停止しています。
参考としてのみ残しておきます。
permission-corrector.sh の修正を行いました。
Cygwin 1.3.19 をベースにした処理内容から、
Cygwin 1.3.22 を最適化した処理内容に修正しています。
また、このページを実施する対象は、
NTFSドライブをCygwin上で使う、Windows NT/2000系の人のみです。
それ以外の人は
実施してはいけません
そして、このページでの作業はAdministratorで(非Administrators)
行うことを想定しています。
まずやったほうがいいことは、/etc/passwd と /etc/group の編集です。
Windows上でも、Cygwin上でもかまいませんので、
以下のような指針で編集することをおすすめします。
- 日本語のアカウント/グループ名があれば英語のものに変更する
- Administrators と Administrator は文字列が長すぎて、
'ls -l' で表示できる範囲で判別できないので短い名称を設定する
- アカウント名で大文字が使われているものは小文字に変更する
- Windows上のグループを反映させたプライマリグループ設定にする
- 各ユーザの HOME を正しく修正する
そして、その際のntsecの詳細などは
NT セキュリティと ntsec の使用方法(Cygwin ユーザーズガイド)
をご覧ください。
具体的に編集する例を示します。
/etc/passwd は、デフォルトでは以下のようなものです(抜粋)。
Administrator:unused_by_nt/2000/xp:500:513:U-MARCURY\Administrator,S-1-5-21-534238220-1343024091-49524915-500:/home/Administrator:/bin/bash
上記を編集して、以下のように設定することをおすすめします。
admin:unused_by_nt/2000/xp:500:544:U-MARCURY\Administrator,S-1-5-21-534238220-1343024091-49524915-500:/home/admin:/bin/bash
/etc/group は、デフォルトでは以下のようなものです(抜粋)。
なし:S-1-5-21-534238220-1343024091-49524915-513:513:
Administrators:S-1-5-32-544:544:
上記を編集して、以下のように設定することをおすすめします。
none:S-1-5-21-534238220-1343024091-49524915-513:513:
admin-s:S-1-5-32-544:544:
この作業のうち特に /etc/passwd のグループのフィールドに関しては
編集しないと Cygwin上でのプライマリグループに意味がなくなります
ので、是非実施しましょう。
先の話になりますが、Cygwin上の daemon を Windows 上のサービスとして
実行するときはその権限が LocalSystem アカウント (OS自身の事) です。
そのため、LocalSystem アカウント にファイルを参照する権限が必要です。
ですが、Cygwin 上ではうまく実装できません。
Cygwin 上では Linux/UNIX と同様、owner/group/other であり、
LocalSystem アカウントの権限を設定できません(多分)。
そういうわけで、Cygwin 上のファイル群について、
Windows 上でアクセス権を与える必要があります。
LocalSystem アカウントは SYSTEM というユーザ名で表されるため、
SYSTEM ユーザについてのアクセス権を与えることになります。
・・・分かりにくいですか?
まぁ、分かりにくくても良いです。
トニカク SYSTEM ユーザに常にフルコントロールを与えてると
問題に悩まされずにすみます。
作業手順は以下のとおりです。
- 手作業 (GUI) でアクセス権処理をするのはあまりに大変なので
コマンドラインで実施します。
- そのための実行ファイル xcacls_setup.exe を取得します。
- xcacls_setup.exe を実行して、本体の xcacls をインストールします。
- 標準では C:\Program Files\Resource Kit\xcacls.exe
としてインストールされるので、そのファイルをフルパスをもちいて、
以下のように実行します。
- ファイル PATH については適宜読み替えた上で、
コマンドプロンプトから 以下のように実行しましょう。
C:\> "C:\Program Files\Resource Kit\xcacls.exe" c:\cygwin /C /T /E /P SYSTEM:F;F /Y
- プロンプトが帰ってくれば終了です。
/etc/passwd と /etc/group の編集が終わり、
SYSTEMアカウントへのアクセス権設定が終わったら準備完了です。
実際に CYGWIN=ntsec 時の NTFS ACL による
所有者&パーミッションの初期設定を行いましょう。
これを実施しないと、
Windowsの基本通りに上位フォルダのアクセス権を継承したままになってしまいますし
Cygwinが望みどおりの動作をしてくれなくなってきます。
とはいっても、手でまともにやるのはナンセンスです。
初期設定ぐらいは一気にスクリプトでやってしまいましょう!
permission-corrector.cygsh
好きなところに置いて、Administrator (非Administrators) で実行してください。
詳しくはスクリプトを読んでほしいですが、
- SYSTEM が所有者 (OWNER/GROUP) にかかわるときは、
その所有権は処理完了時に元に戻しておく。
- SYSTEM 以外が所有者 (OWNER/GROUP) のもので、/home 配下以外の
ファイル・ディレクトリは所有者を Administrator に設定し、
グループに Administrators を設定する。
- ファイルが実行可能かどうかを file コマンドを用いて判定し
実行可能ファイルなら 755 それ以外は、644 のパーミッションを設定。
- ディレクトリは基本的に755。
- /home には 777 /tmp には 7777 を設定
- スクリプトと同じディレクトリにログを残します(終了後には消してかまいません)
という処理を行ってます。
結構時間がかかりますので、実行したら食事とお風呂へどうぞ(笑)
処理が終わったら、一度 Cygwin コンソールを全部閉じて、
新しい Cygwin コンソールから、確認してみてください。
残りの設定は個別に手作業でどうぞ☆
ちなみに、Cygwin 1.3.17 (含む)以前で実行するときは
ROOTID=544 で実行したほうが素敵な感じになります。