NTカーネル用のMicrosoft Interix Unixサブシステム (現在は廃止)は、他のユーザーとは異なる方法でユーザーおよびグループのアクセス許可を扱います。
ユーザーとグループの情報は、セキュリティアクセスデータベースに保存されます。ユーザーとグループは両方とも同じデータベースに格納されますが、グループ名とユーザー名は一意である必要があります。どのグループもユーザー名を持つことはできず、その逆も同様です。(このデータベースは、UNIX の/etc/passwd
and /etc/groups
ファイルを置き換えます。)ユーザーとグループは、適切なWindows方法論(ユーザーマネージャー、Active Directoryユーザーとコンピューター、またはローカルユーザーとグループ)またはWin32 net user
コマンドを使用して作成されます。(ユーザーを作成および削除するシェルスクリプトの例は、ディレクトリに含まれてい/usr/examples/admin
ます。)ユーザーは多くのグループに所属できます。
以下に、より具体的なマニュアルの抜粋を示します。
Windowsでは、ユーザーまたはグループがオブジェクトを所有できます。これは、ユーザーのみがオブジェクトを所有するUNIXとは異なります。
Windowsは、セキュリティ識別子(SID)を使用して、すべてのユーザーとグループを内部的に識別します。ハッシュアルゴリズムは、一意のSID値を生成します。2人のユーザーまたはグループが同じSIDを持つことはありません。
オブジェクトにアクセスする権限を持つユーザーとグループは、SIDによって識別されます。Windowsで保護できるすべてのオブジェクトには、アクセス制御エントリ(ACE)と呼ばれる個別のエントリで構成される随意アクセス制御リスト(DACL)があります。ACEには、ユーザーまたはグループのSIDと、オブジェクトに対する個々のユーザーまたはグループのアクセス権の説明という2つの重要な情報が含まれています。
CHGRP
...ファイルのグループIDを変更する... chgrp(1)を呼び出すユーザーは、指定されたグループに属し、ファイルの所有者であるか、適切な特権を持っている必要があります。
チャウン
...所有者とグループのオペランドは両方ともオプションです。ただし、1つを指定する必要があります。グループオペランドを指定する場合は、コロン(:)を前に付ける必要があります。
所有者は、数値のユーザーIDまたはユーザー名で指定できます。ユーザー名が数値ユーザーIDでもある場合、オペランドはユーザー名として使用されます。グループは、数値のグループIDまたはグループ名のいずれかです。グループ名が数値グループIDでもある場合、オペランドはグループ名として使用されます。
セキュリティ上の理由から、ファイルの所有権は、適切な特権を持つプロセスによってのみ変更できます。
私が読んだように、ユーザーアカウントが、そのグループが所有するファイルのアクセス許可を変更するための十分な特権を持つWindowsグループに属している場合chgrp
、ユーザーアカウントの制御外でそのファイルを効果的に作成することができます。これはchown
、明示的なuser:group
パラメーターを使用する場合よりも制御が少なくなります。宣言の可能性なしに、そのコンテキストではuser:
と :group
あなたはそうと同じ結果を得ることができなかったん。
InterixがWindows ACLと相互作用する方法の詳細な外観へのリンクは、このような知識が他のUnixバリアントのSambaファイルシステムにどのように適用されるかに焦点を当てています。
以下は、現在使用されていない Solarisドキュメントへのリンクrstchown
です。
chown(2)
システムコールのPOSIXセマンティクスが有効かどうかを示します...
どうやら、パラメータが値に設定されている場合0
...
... POSIXセマンティクスをオフにすると、さまざまなセキュリティホールの可能性が広がります。また、ユーザーがファイルの所有権を別のユーザーに変更し、ユーザーまたはシステム管理者の介入なしにファイルを取り戻すことができない可能性を開きます。
このようなオプションは、SolarisのPOSIX準拠を無効にしません。ただそれがオプションであるというだけで、適合とみなされます:
POSIX.1-2008に準拠するすべての実装は、以下で説明するすべての機能をサポートしますが、
これらの機能の一部またはすべてを削除または変更できるシステム依存またはファイルシステム依存の構成手順が存在する場合があります。厳格なコンプライアンスが必要な場合、このような構成は行わないでください。
次の記号定数は、-1以外の値で定義されます。定数が値ゼロで定義されている場合、アプリケーションが使用する必要がありsysconf()
、pathconf()
またはfpathconf()
機能、または
getconf
その時点で、または問題の特定のパス名システム上に存在する特徴を決定するために、ユーティリティを。
_POSIX_CHOWN_RESTRICTED
の使用はchown()
、適切な特権を持つプロセス、およびプロセスの有効なグループIDまたはその補足グループIDの1つのみにファイルのグループIDを変更することに制限されています。
chown()
システム機能-両方製文書化されたシステムコールであるchown
とchgrp
シェルユーティリティは、 -ている失敗する指定された多くの理由のために。その中で:
EACCES
パスプレフィックスのコンポーネントに対する検索許可が拒否されました。
ELOOP
パス引数の解決中に発生したシンボリックリンクにループが存在します。
EPERM
実効ユーザーIDがファイルの所有者と一致しないか、呼び出しプロセスに適切な特権がなく、_POSIX_CHOWN_RESTRICTEDはそのような特権が必要であることを示します。
ただし、root以外のユーザーにアクセス許可の変更権を付与する動作は、Solaris固有のものではありませんでした。著者が次のように述べているこのフォーラム投稿では、Unixファイルのアクセス許可が非常に優れています -多少古い場合-
もともと、Unixはファイルの所有者がファイルを渡すことを許可していました。ファイルの所有者は、所有者を他の誰かに変更できます。非rootユーザーがこの操作を取り消す方法はありませんでした... BSD [後で]chown
非rootユーザーから削除されました... [一部の理由] ...ディスククォータを実装して、ディスク容量を制限できました。ユーザーはファイルシステム内にいる可能性があります...いたずらなユーザーは、クォータを超えてスニークするために大きなファイルを配布できます。
今日、非ルートがchown
ファイルを作成できるかどうかを言うのは簡単ではありません。Unixの多くのバージョンでは、両方の動作が許可されています...
別の優れた-そして最近の- メーリングリストの投稿はこれを引用して続けています:
ほとんどのOSのデフォルトでは、chown
ルートのみに制限されています。また、セキュリティを考慮してこの方法を維持する必要があるというコンセンサスがあります。非rootユーザーがファイルの所有者を変更し、実行ビットがオンになっている場合SUID
、SGID
ビットとビットをクリアする必要があります。これはで発生する場合と発生しない場合がありroot
ます。
私は最後の段落がそれをうまく言っていると思います。
また、その記事CAP_CHOWN
はLinuxでその機能を制御することにも言及しています(POSIX_CHOWN_RESTRICTED
動作にのみ影響するはずです)。CAP_FOWNER
機能もあり、動作が少し異なります。
そして、あなたが2003年に指摘したように:
少なくともHPUXでは、特権ユーザーでなくてもファイルの所有者を(root
たとえば)変更できます。
...構成setprivgroup
パラメータに依存します。
ルート以外のユーザーがファイル許可を操作できる場合は、質問で引用された根拠に記載されているように、ユーザーはchown
別のユーザーが所有するようにそのユーザーが所有するファイルである可能性があります。ファイルのグループ所有権とchown
ingユーザーのグループが一致しない場合、ユーザーはそのファイルを変更できなくなります。
このシナリオでchown
は chgrp
、ユーザーにはそのファイルのアクセス許可を変更するアクセス許可がないため、失敗しますがchown user:group
、グループがユーザーのものである限り成功します。
同様に生じる可能性のある他の多くのニッチな状況がおそらくあります。これには、ディレクトリスティッキーおよび/またはsetgidビット、ファイルシステムおよび/または実装固有のアクセス制御リストが含まれます。たとえば、このスレッドは興味深いものです。数え切れないほどの順列は、私自身の微弱な把握をはるかに超えています。そのため、この答えはウィキ化されています。あなたがこれを読んでいるなら、あなたはそれを改善する価値があると信じています、そしてあなたはあなたが方法を知っていると信じています-してください。
同様の失敗をもたらす可能性があるファイルのパーミッション、ツリートラバーサル、およびシンボリックリンクの様々な可能性のある影響についての詳細なドキュメントもあります-R
ecursive chown
ここでのアプリケーションは:
POSIX XRATのセクションの見出し第三と第四ドメイン:
一般に、ファイル階層トラバーサルのオプションを指定するユーザーは、単一の物理階層での操作を希望するため、階層外のファイルを参照するシンボリックリンクは無視されます。たとえば、chown owner fileは、-Rオプションが指定された同じコマンドとは異なる操作です。この例では、コマンドの動作をchown
owner
file
ここでchown -R
説明しますが、コマンド所有者ファイルの動作は3番目と4番目のドメインで説明します。
...デフォルトの論理ウォークにセキュリティ上の問題があります。歴史的に、コマンドのchown -R
ため、ユーザーのファイルには、スーパーユーザーのための安全となっているのsetuidとsetgidのファイルの所有権が変更されたときにビットが失われました。ウォークが論理的である場合、ユーザーがツリー内の任意のファイルを指すシンボリックリンクを挿入した可能性があるため、所有権の変更は安全ではなくなります。繰り返しますが、これはシンボリックリンクを介して間接的でない階層トラバーサルを行うコマンドにオプションを追加する必要があり、再帰ウォークを行う歴史的なスクリプトはすぐにセキュリティの問題になります。これは主にシステム管理者にとっての問題ですが、ユーザーのクラスごとに異なるデフォルトを持たないことが望ましいです。
...
4.3 BSDではchgrp
、ツリートラバース中に、ターゲットではなくシンボリックリンクのグループが変更されました。4.4 BSDのシンボリックリンクには、所有者、グループ、モード、またはその他の標準UNIXシステムファイル属性がありませんでした。
そして、chgrp
適切なPOSIX ページから、可能性のある不完全な-R
再帰的アクション、または少なくとも以前は何であったかを指し示しています。
System VおよびBSDバージョンは、異なる終了ステータスコードを使用します。一部の実装では、発生したエラーの数のカウントとして終了ステータスを使用しました。有効な終了ステータス値の範囲をオーバーフローする可能性があるため、この方法は実行できません。標準の開発者は、終了値として0と> 0のみを指定して、これらをマスクすることを選択しました。