
私が知る限り、Unixファイル権限には次のものがあります。「ユーザー」、「グループ」、「ワールド」オクテット。議論のためにsetuid / stickyビットが存在しないと仮定します。
次の例を考えてみましょう。
$ echo "Hello World" > strange
$ chmod 604 strange
$ ls -l strange
-rw----r-- 1 mrllama foo 12 Apr 13 15:59 strange
john
私のグループのメンバーである他のユーザーがいるとしましょうfoo
。
- Johnはこのファイルに対してどのような権限を持っていますか?
- システムに最も具体的な権限一致があります(Johnは所有者ではありませんが、グループに属するため、
foo
「グループ」オクテットの権限を使用します)。 - ...または彼に適用される最も緩いオクテットに従いますか(つまり、Johnは「グループ」と「世界」の基準を満たしているため、どちらもより緩いオクテットに従います)。
ボーナス質問:
- 権限に変更された場合はどうなりますか
642
?ジョンは読むことができますか? - このような奇妙な権限を与える理由はありますか
604
?
答え1
Unix スタイルの権限を使用してアクセスを決定するとき、現在のユーザーを最初にファイルの所有者、次のグループと比較し、適用される権限は、一致する最初のコンポーネントの権限です。したがって、ファイル所有者は所有者の権限(およびその権限のみ)を持ち、ファイルグループのメンバーはグループの権限(およびその権限のみ)を持ち、他のすべての人は「他のユーザー」権限を持ちます。
したがって:
- Johnには、このファイルに対する権限がありません。
- 最も許可された一致ではなく、最も具体的な権限一致が勝ちます(アクセス権限は累積されません)。
- 権限があれば、
642
ジョンはファイルを読み取ることができます。 - 権限が付与される理由は次のとおりです。例
604
:これにより、グループを除外でき、場合によっては便利です。students
アクセス可能な学生ファイルを除くすべての人のために、教職員がグループを作成できるグループを持つ学術システムで見たことがあります。
root
ファイルで定義されている権限に関係なく、すべてのコンテンツにアクセスできます。
より複雑なアクセス制御のためには、以下を見てください。SELinuxそしてPOSIX ACL。 (特にSELinuxはroot
アクセス可能な項目を制限することもできます。)
答え2
john
uidがないと仮定すると、0
グループのメンバーであるため、john
権限john
がなく、グループが一致するため、権限の確認ではワールドビットを考慮しません。 (出典:「Advanced Programming in Unix Environments」、第4章、第1回エディション5(80ページ)では、同じ理由でこれらのビットが適用され642
ます。 。4
604