Linuxでディレクトリ(共有)を作成し、すべてのユーザーがその共有ディレクトリにファイルを作成できるようにしたいと思います。さらに、ファイルを作成したユーザーのみが自分のファイルを削除/変更できる必要があり、他のすべてのユーザーは/Sharedディレクトリに制限された読み取り実行権限(705または755)を持つ必要があります。
たとえば、ユーザーTOMが共有ディレクトリに「sample」というファイルを作成する場合、ユーザーTOMは/ sharedにある「sample」ファイルの所有者である必要があります。ユーザーJackとユーザーMattは、「sample」ファイルに対する読み取りおよび実行権限に制限する必要があります。これは、/Sharedディレクトリの「sample」ファイルに対して755権限を設定する必要があることを意味します。共有ディレクトリ内のユーザーTOMによって生成されたファイルを他のユーザーが編集または削除するのを防ぎます。どうやってこれを達成できますか?
ありがとう、CG
答え1
一般ファイルを自動的にインポートするように求められたコメントから実装する権限、それは難しい部分です。
open(2)
/シリーズのシステムコールを使用して書き込み用にファイルを開くと、creat(2)
プログラムは〜しなければならないmode
ファイル権限設定のデフォルト値として使用されるパラメータを提供します。一般ファイルを生成するほとんどのプログラムでは、このパラメーターは通常モード0666として指定されます。意図的に実行可能ファイルを生成するプログラムのみがモード0777をデフォルト値として使用します。
オペレーティングシステムはこのデフォルトモード値とユーザーのネットマスク設定を取得し、バイナリAND操作を実行します。モードビットは次にのみ存在します。両方デフォルトモード値そしてネットマスク値が適用されます。結果はchmod
結果ファイルの値として直接使用されます。するメカニズムはありません。次へ追加生成されるファイルを呼び出すプログラムによって要求されていない権限は、umask
権限をさらに制限できます。
ディレクトリを作成するために、mkdir(2)
まったく同じ権限メカニズムで異なるシステムコールが使用されます。ただし、デフォルトでは、誰もが新しいディレクトリを作成するために呼び出すときにデフォルトモード値0777を使用します。
POSIX ACLは同様のメカニズムを使用して実行権限を割り当てるかどうかを決定するため、デフォルトではすべてのファイルに実行権限を付与するのに役立ちません。
私が知る限り、Unixスタイルのファイルシステムで欲しいものを達成する唯一の方法は次のとおりです。ユーザーが使用するすべてのプログラムを再構築します。ファイルを生成するときは、デフォルトモード0777を使用してください。ただし、これらのプログラムは実行権限を持つファイルを生成します。どこでも、特定のディレクトリだけにあるわけではありません。
しかし、私が「Unixスタイルのファイルシステム」と言ったことを覚えておいてください。 UNIX以外のファイルシステムは、ファイル権限を完全に異なる方法で処理します。特別なディレクトリにNTFSファイルシステムを使用できる場合は、デフォルトのACLにファイルにデフォルトで実行権限を割り当てさせることができますか?
答え2
これはフォルダに対するデフォルトの権限です/tmp
。したがって、ディレクトリを作成して権限1777を割り当てることができます。
mkdir /path/to/Shared
chmod 1777 /path/to/Shared
次に、新しいファイルの権限を詳細に調整するには、ユーザー権限マスクを設定しますumask
。たとえば、内部/tmp
rm /tmp/test
umask 011
touch /tmp/test
ls -l /tmp/test
-rw-rw-rw- 1 user user 0 nov 21 17:14 /tmp/test
別のマスクで:
rm /tmp/test
umask 022
touch /tmp/test
ls -l /tmp/test
-rw-r--r-- 1 user user 0 nov 21 17:15 /tmp/test
umaskはユーザーにとってグローバルです。これが役に立つかどうかわかりません。
答え3
ほとんどのPOSIXユーザーは、基本的な権限を理解していません。それぞれ「rwx」権限を持つ所有者/グループ/その他の役割がありますが、3つのrwxセットのうちの1つだけが1人のユーザーまたはプロセスに適用されます。オーナーならグループでも何でもできません!ファイル権限が007の場合、所有者またはファイルグループの誰もファイルにアクセスできないことを意味します。 non-owner_non-group-member=other のみアクセスできます。
ディレクトリからファイルを作成および削除することは、そのディレクトリの権限を意味し、ファイルの権限とは何の関係もありません。ディレクトリに対する書き込み権限(所有者/グループ/その他のいずれかに基づいています)があれば、そのディレクトリからすべてのファイルを作成して削除できます。 [root には CAP_DAC_OVERRIDE 機能があるため、これらの DAC 権限制限を無視できます]。
幸いなことに、ディレクトリにはファイル所有者だけがファイルを削除(リンク解除)するための固定ビット権限もあります。
次のようにディレクトリを作成する必要があります。
sudo mkdir somedir
sudo chmod 1707 somedir # set sticky bit
ユーザーがsomedirの下に作成できるサブディレクトリには通常(umaskを参照)、755の権限があり(他のユーザーは読み取りおよび検索できますが、ディレクトリに書き込むことはできません)、これらのサブディレクトリに作成されたファイルには544の権限があります。があります。実行権限。