%20%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%A6%20NTFS%20%E4%B8%8A%E3%81%AE%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E6%89%80%E6%9C%89%E6%A8%A9%E3%82%92%E6%B1%BA%E5%AE%9A%E3%81%97%E3%80%81%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
私の知る限り、NTFS には POSIX のようなグループ ファイル所有者の概念はありません。(間違っていたら訂正してください。) Aユーザー1つまたは複数のグループのメンバーになることができ、ファイルは別々に権限各グループに対して、ファイルには通常の「所有者」に加えてグループ所有者は存在しません。ただし、おそらく紛らわしいことですが、「通常の所有者」はグループである可能性があります。
ここで、Windows 7 上の cygwin 2.8.0 bash で NTFS 内のファイルを実行するとls -l
(マシンとアカウントは Active Directory 環境にあります)、次のグループが表示されます。
$ ll -n cleartool golden-dev-val.cfgspec
-rwxrwxrwx+ 1 2736485 1049089 277 9. Mai 12:34 cleartool
-rwxrwxrwx+ 1 1493656 3556770305 9159 19. Mai 16:25 golden-dev-val.cfgspec
(長い GID は別のドメインのものです。) 最初、cygwin は所有者のプライマリ グループからグループを推測するものだと思っていました。そうすると、グループは常にユーザーとともに変更されることになります。しかし、この 2 つは独立しているようです。
$ chown 2736485 golden-dev-val.cfgspec
$ ll -n cleartool golden-dev-val.cfgspec
-rwxrwxrwx+ 1 2736485 1049089 277 9. Mai 12:34 cleartool
-rwxrwxrwx+ 1 2736485 3556770305 9159 19. Mai 16:25 golden-dev-val.cfgspec
$ chgrp 3556770305 cleartool
$ ll -n cleartool golden-dev-val.cfgspec
-rwxrwxrwx+ 1 2736485 3556770305 277 9. Mai 12:34 cleartool
-rwxrwxrwx+ 1 2736485 3556770305 9159 19. Mai 16:25 golden-dev-val.cfgspec
読みましたhttps://cygwin.com/cygwin-ug-net/ntsec.htmlこれは、Posix UID と GID が Windows SID からどのように計算されるかを説明していますが、cygwin がファイルのグループ所有権 (これは Windows/NTFS 機能ではないため、cygwin アドオンが必要です) をユーザー所有権 (これは Windows/NTFS 機能であるため、すぐに使用できます) とは別に保存する方法がわかりません。
<cygwin key="value" key="value" [...] />
を介してローカル ユーザー アカウントに「グループ」キーを含むコメントを保存することに関する注意がありますnet user ...
が、これはローカル アカウント用であり、ファイルごとに保存されるわけではないため、私の質問に答えることはできません。
では、cygwin はどのようにしてファイルのグループ所有権を保存および/または取得するのでしょうか? これは Windows のメカニズムですか? もしそうなら、それらを操作するための Windows ツールはありますか?
答え1
cygwin のソース コードをざっと見たところ、 は およびを介して - を間接的に呼び出しているだけchgrp.exe
だと思います。RtlSetGroupSecurityDescriptor()
chown(2)
fhandler_disk_file::set_posix_access()
この機能はCLIレベルで提供されており、サブイナクル.exe:
subinacl /file testfile /setprimarygroup=groupname
ただし、私のテストでは、ツールが成功するには SeSecurityPrivilege が必要であり、警告が表示されないようにするには SeBackupPrivilege が必要です。