だから、私はここ数年Linuxを使用していて、この答えを本当に知っているはずですが、それを見つけるのに苦労しています。具体的には、Debianベースのディストリビューション(主にUbuntu)を使用しています。
4人以上のユーザーがいるサーバーを使用している場合、ユーザーごとに異なるアクセス許可のセットをファイルに設定するにはどうすればよいですか。
例えば:
これらの権限と所有権を持つファイルがある場合:
rwx rw_ r__ user1:group1 file1.txt
これらの必要な権限を持つ3人のユーザーがいます...
ser1でファイルを所有し、ser2でgroup1になり、serでなくてもかまいません-正しい?
しかし、ser4とser5がある場合はどうでしょうか。
どうすれば設定できますか?
以前はこれを行う必要はありませんでしたが、Windows管理者からその質問をされましたが、正直に答えることができませんでした。
従来のUNIXのアクセス許可では、ユーザー、グループ、その他のアクセス許可のみが許可されています。これらはグループを作成する必要がある厄介な組み合わせになる可能性があります...
そのため、新しい形式のACL(アクセス制御リスト)が追加されました。これにより、異なる権限を持つ複数のユーザーと複数のグループを指定できます。これらはsetfacl
コマンドで設定され、getfacl
で読み取られます
$ setfacl -m u:root:r-- file.txt
$ setfacl -m u:bin:-wx file.txt
$ setfacl -m u:lp:--x file.txt
$ getfacl file.txt
# file: file.txt
# owner: sweh
# group: sweh
user::rw-
user:root:r--
user:bin:-wx
user:lp:--x
group::r--
mask::rwx
other::r--
ls
の出力を見ると、ファイルにACLがあるかどうかが簡単にわかります。
$ ls -l file.txt
-rw-rwxr--+ 1 sweh sweh 0 Jul 26 10:33 file.txt
権限の最後の+
は、ACLを示します。
はい、ACL:により、さまざまなユーザーまたはグループにさまざまな権限を自由に設定できます。 IIRCの通常のグループ権限は、ACLを介してグループおよびユーザーが持つことができる一連の権限を制限します(mask
にgetfacl
として表示)。ただし、setfacl
は、権限を追加します。
ただし、場合によっては、一連の権限が意味をなしているかどうかを確認する必要があります。
これらの必要な権限を持つ3人のユーザーがいます...
-user1 rwx
-user2 rw_
-user3 r__
これをACL:sで、または(おおよそ)user1をファイルの所有者にし、user2をグループのメンバーにして、user3を含む他のユーザーに読み取りアクセスを許可することで、通常のUnix権限で実装できます。ただし、(ディレクトリへのアクセス権を持つ)全員が読み取りアクセス権も持っています。
それらの権限の意味を考えてみましょう。読み取り可能なユーザーと、読み取りと書き込みが可能な別のユーザーがいます。それは完全に普通です。これらのどちらにもファイルを実行するためのアクセス権はありませんが、3番目のユーザーもそれを実行できるはずです。
それは私の心にはあまり意味がありません。元のファイルを実行するためのアクセス権がなくても、ファイルを読み取り、コピー(*)を作成し、実行可能ファイルとしてマークして実行できるユーザーであれば誰でもアクセスできます。実行可能ファイルがsuidを介して昇格された特権を持っている場合は、一部のユーザーだけが実行アクセス権を持つことが理にかなっている唯一の状況です。しかし、その場合は、ファイルへの書き込みアクセス権を持つ他のユーザーも必要ありません。
同じ意味で、user4と-wx
およびuser5と--x
私には意味がありません。 appendsのみを許可する可能性がある場合、書き込み専用アクセスは理にかなっている可能性がありますが、アクセス許可システムはそれほどきめ細かくありません。
(*どこにも書き込めない場合を除く)
ただし、x
ビットの奇妙な要件を削除すると、user1とuser2に書き込みアクセスがあり、user3に読み取りアクセスができるファイルが残ります。 1つのライターと複数のリーダーは、従来のモデルでは簡単ですが、この場合は、ファイルのアクセス許可とそれを含むディレクトリのアクセス許可を組み合わせるためのトリックが必要になります。幸い、多くの場合、より多くの権限を持つ1人のユーザーで十分です。
実行ビットの要件がない場合、これはACL:sを使用するケースのように見えます。しかし、これを使うと、この特定の例は私にはかなり複雑に思えます。