「所有者」権限が存在する理由はありますか?グループ権限は十分ではありませんか?


21

Linuxでのファイルのアクセス許可の仕組みを理解していると思います。ただし、なぜ2つではなく3つのレベルに分割されているのか、私にはよくわかりません。

次の問題に回答してください。

  • これは意図的な設計ですか、それともパッチですか?つまり、所有者/グループのアクセス許可は、何らかの論理的根拠とともに設計および作成されたのか、それとも次々にニーズに答えるために来たのか?
  • ユーザー/グループ/その他のスキームは有用だが、グループ/その他のスキームでは十分ではないシナリオはありますか?

最初の質問に対する回答は、教科書または公式の掲示板のいずれかを引用する必要があります。

私が検討したユースケースは次のとおりです。

  • プライベートファイル-ユーザーごとにグループを作成することにより、非常に簡単に取得できます。これは多くのシステムでよく行われています。
  • 所有者(システムサービスなど)のみにファイルへの書き込みを許可し、特定のグループのみに読み取りを許可し、他のすべてのアクセスを拒否します-この例の問題は、グループが書き込みアクセスを持つ必要がある場合/ group / otherはそれで失敗します。両方の答えはACLを使用することであり、私見では、所有者の許可の存在を正当化しません。

NB superuser.comで質問を閉じた後、この質問を改良しました。

EDITが「... group / other ...」に「ただし、グループ/所有者スキームでは不十分」を修正しました。


1
グループのアクセス許可で十分だと思う理由がよくわかりません。開発者が独自のプライベートファイル(構成など)を持つことができるようにしたいが、互いにコードを共有できるようにしたい状況を想像してください。devsグループを持つことでこれが可能になります。
クリスダウン

@ChrisDown彼のは、ユーザーを作成したいと言っfooグループのメンバーfoodevsの共有ファイル、および割り当てdevにグループやプライベートファイルをfooグループ
マイケルMrozek

4
あなたがそれをしている間に、なぜ誰もがメンバーである「全員」のグループではなく、世界の許可を持っているのですか?答えは、ACLの前にユーザー/グループ/その他のアクセス許可のセットアップが考案されたことです。
Random832

回答:


24

歴史

本来、Unixには所有ユーザーと他のユーザーのみの許可がありました。グループはありませんでした。特にUnixバージョン1のドキュメントを参照してくださいchmod(1)。したがって、下位互換性には、他に何もないとしても、所有ユーザーの許可が必要です。

グループは後で来ました。ファイルのアクセス許可に複数のグループを含めることを許可するACLは、かなり後のことです。

表現力

1つのファイルに対して3つのアクセス許可を設定すると、2つだけのアクセス許可よりもきめの細かいアクセス許可が非常に低コストで(ACLよりもはるかに低い)許可されます。たとえば、ファイルはmodeを持つことができますrw-r-----。所有者のみが書き込み可能で、グループが読み取り可能です。

別の使用例は、1つのグループのみが実行可能なsetuid実行可能ファイルです。たとえば、モードrwsr-x---が所有root:admin者でadminあるプログラムでは、グループ内のユーザーのみがそのプログラムをルートとして実行できます。

「このスキームが表現できない許可があります」は、それに対する恐ろしい議論です。適用可能な基準は、コストを正当化する十分に一般的な表現可能なケースがあるかどうかです。この場合、特にユーザー/グループ/その他のトリプティックのその他の理由を考えると、コストは最小限です。

シンプルさ

ユーザーごとに1つのグループを作成すると、管理オーバーヘッドが小さくなりますが、重要ではありません。プライベートファイルの非常に一般的なケースがこれに依存しないことは良いことです。プライベートファイルを作成するアプリケーション(電子メール配信プログラムなど)は、ファイルにモード600を与えるだけでよいことを知っています。ユーザーのみを含むグループを探してグループデータベースを走査する必要はありません。そのようなグループが存在しない場合、または複数存在する場合はどうしますか?

別の方向から来て、ファイルが表示され、そのアクセス許可を監査する(つまり、ファイルが本来あるべきものであることを確認する)とします。グループ定義をたどる必要があるときよりも、「ユーザーだけがアクセスできる、次はいい」ということができる方がはるかに簡単です。(このような複雑さは、ACLや機能などの高度な機能を多用するシステムの悩みの種です。)

直交性

各プロセスは、特定のユーザーおよび特定のグループとしてファイルシステムアクセスを実行します(補助グループをサポートする現代のユニスに関するより複雑なルールを使用)。ユーザーは、ルート(uid 0)およびシグナル配信許可(ユーザーベース)のテストなど、多くのことに使用されます。プロセスのアクセス許可でユーザーとグループを区別することと、ファイルシステムのアクセス許可でユーザーとグループを区別することには自然な対称性があります。


優れた答えであり、私は年上の男について学ぶのを楽しんだ。ただし、あなたの言ったことについてはいくつかの留保があります。実際にはACLとほぼ同じ(正確ではないにしても)できるシンプルなシステムでは、「rwx」アクセス許可のそれぞれに(他の方法ではなく)グループを保持させます。つまり、読み取りグループ、書き込みグループ、および実行グループがあります。OSの目的で本当に必要な場合は、ファイルに所有者を添付できます。そのようにして、特別な「所有者」グループと「全員」グループを指定することもできます。階層以外にも、これは単純さや直交性など、すべてを網羅していると思います。
ユバル

1
@Yuval説明しているのはACLシステムです。Linuxと同じですが、ユーザーに権限を直接割り当てることができない点が異なります。
ジル 'SO-悪であるのをやめる

それかもしれない。私が強調しようとしたことは、現在、各ファイルレコードに2つのID(グループ、所有者)と1つのビットマスクが保持されていることです。4つのIDを保持する方が効果的ではありませんか(コスト/ゲインの議論)。(グループの実行、グループの読み取り、グループの書き込み、所有者)
Yuval

@Yuvalなぜ4つのIDですか?それはACLよりもはるかに制限され(すべてのセットのグループを定義するためにルートが必要になるため)、現在のUNIXパーミッションよりも柔軟性がほとんどありません(実行から読み取りを区別することは非常にまれであり、書き込みには頻繁に必要です)読み取りグループと書き込みグループの結合)。各権限のグループのリストと適切な測定のためのユーザーのリストを許可する場合(常に適切なグループがあるとは限らないため、すべてのシステムがユーザーごとにグループを持っているわけではないため)、基本的にSolaris / Linux ACLがあります。
ジル 'SO-悪であるのをやめる'

私が説明したのはACLであると主張しますが、これは、現在のLinuxパーミッションスキームが障害のあるACLであり、1つのユーザーレコード、1つのグループレコード、および(Windowsの用語を使用する)1つのレコードのみを持つことが許可されていることを意味します。私は、セマンティクスを再配置することで障害の程度を修正することを提案しました。エンティティを処方するのではなく、許可を処方します。これが従来のACLの実装方法かもしれません-私は知りません。要点は、現在の状態と比較して、ストレージとシンプルさの点で、最小限のコストであり、直交性を保ちながらも、ACLの完全な表現力を備えています。
ユバル

10

これは意図的な設計ですか、それともパッチですか?つまり、所有者/グループのアクセス許可は、何らかの論理的根拠とともに設計および作成されたのか、それとも次々にニーズに答えるために来たのか?

ファイルに対するユーザー/グループ/その他の権限は、元のUnixデザインの一部です。

ユーザー/グループ/その他のスキームは有用だが、グループ/所有者のスキームでは十分ではないシナリオはありますか?

はい、セキュリティとアクセス制御が重要であると想像できるほぼすべてのシナリオ。

例:システム上のいくつかのバイナリ/スクリプトをに実行のみのアクセスを許可しother、読み取り/書き込みアクセスをに制限したい場合がありrootます。

所有者/グループのアクセス許可のみを持つファイルシステムのアクセス許可モデルについて、何を念頭に置いているのかわかりません。otherカテゴリが存在しない場合、安全なオペレーティングシステムをどのように使用できるかわかりません。

編集: ここでのgroup/otherアクセス許可だけが必要な場合、暗号化キーを管理する方法、または適切なユーザーのみがメールスプールにアクセスできる方法を考案することをお勧めします。秘密鍵のuser:user所有権が厳密に必要な場合もありますが、user:group所有権を与えることが理にかなっている場合もあります。

プライベートファイル-ユーザーごとにグループを作成することにより、非常に簡単に取得できます。これは多くのシステムでよく行われています。

これは簡単に実行できotherますが、グループの存在でも同じように簡単に実行できます...

所有者(システムサービスなど)のみにファイルへの書き込みを許可し、特定のグループのみに読み取りを許可し、他のすべてのアクセス拒否します。この例の問題は、グループに書き込みアクセス権が必要になると、ユーザーが/ group / otherはそれで失敗します。両方の答えはACLを使用することであり、私見では、所有者の許可の存在を正当化しません。

otherUnixファイルシステムのアクセス許可のカテゴリの論理的な必要性についての私の主張を繰り返していると思われるあなたの声明の一部を強調しました。

あなたが考えているようなファイルシステムの設計(私が知ることができるものから)は、安全でないか扱いにくいでしょう。Unixは非常に優秀な人々によって設計されたものであり、彼らのモデルはセキュリティと柔軟性の可能な限り最良のバランスを提供すると思います。


1
私はタイプミスは、「グループ/その他」であることを意図していた「グループ/所有者」だと思う
Random832

ああ、あなたはおそらく正しいです!その場合、別の反例を追加します。
チャールズボイド

3
The UNIX Time-Sharing System1974年にDennis M. RitchieとKen Thomsonによって書かれたを読むことができるように、元々、許可には7ビットがありましたAlso given for new files is a set of seven protection bits. Six of these specify independently read, write, and execute permission for the owner of the file and for all other users.(7番目のビットがビットでしたsetuid)。
カルロスキャンデロス

4

これは意図的な設計ですか、それともパッチですか?つまり、所有者/グループのアクセス許可は、何らかの論理的根拠とともに設計および作成されたのか、それとも次々にニーズに答えるために来たのか?

はい、これは初期の頃からUNIXに存在していた意図的な設計です。メモリがKB単位で測定され、今日の標準ではCPUが非常に遅いシステムに実装されました。このようなルックアップのサイズと速度が重要でした。ACLはより多くのスペースを必要とし、より遅くなります。機能的には、everyoneグループは他のセキュリティフラグで表されます。

ユーザー/グループ/その他のスキームは有用だが、グループ/所有者のスキームでは十分ではないシナリオはありますか?

ファイルアクセスによく使用するアクセス許可は次のとおりです(簡単にするためにビット値を使用していますが、これは通常、ビット値を設定するためです)。

  • 600または400:ユーザーのみのアクセス(そして、はい、ユーザーに読み取り専用アクセスを許可します)。
  • 640または660:ユーザーおよびグループアクセス。
  • 644666または664:ユーザー、グループ、およびその他のアクセス。2レベルの許可スキームでは、これら3つのケースのうち2つしか処理できません。3番目にはACLが必要です。

私がよく使用するディレクトリとプログラムの場合:

  • 700または500:ユーザーのみのアクセス
  • 750または710:グループのみのアクセス
  • 755777775、または751:ユーザー、グループ、および他のアクセス。ファイルと同じコメントが適用されます。

上記は最も一般的に使用されますが、私が使用する許可設定の完全なリストではありません。上記のアクセス許可とグループ(ディレクトリにスティッキグループビットが含まれる場合があります)を組み合わせれば、ACLを使用したすべてのケースで十分です。

上記のように、ディレクトリリストに許可をリストするのは非常に簡単です。ACLが使用されていない場合、ディレクトリリストのみでアクセス許可を監査できます。ACLベースのシステムで作業するとき、アクセス許可を確認または監査することは非常に困難です。


3

ユーザー/グループ/その他の許可システムは、ACLが発明される前に設計されました。UNIXの初期に遡りますので、ACLで問題を解決する必要があるとは言えません。ACLの概念が明白に思えても、固定量ではなく、各ファイルで可変量の許可情報を保存および管理するために、かなりの量の余分なオーバーヘッドが必要でした。

すべてにACLを使用することは、「一目で」表示できる許可情報の明確に定義されたサブセットがないことも意味します。の出力にls -lは、標準(ユーザー/グループ/その他)のアクセス許可、ユーザーとグループの名前、ACLが関連付けられているエントリの追加表記(+または@記号)がすべて1行で表示されます。システムでは、ACLの「上位2」グループを識別して同等の機能を提供する必要があります。

追加のポイントとして、ファイルはまだする必要が持っている UNIXのACLは、ACLを変更することが許可されている人のために提供していないので、UNIXモデルの所有者。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.