cygwin (2015 年以降) はどのようにして NTFS 上のグループ所有権を決定し、保存するのでしょうか?

cygwin (2015 年以降) はどのようにして NTFS 上のグループ所有権を決定し、保存するのでしょうか?

私の知る限り、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 が必要です。

関連情報