2つのsetuidプログラム/usr/bin/bar
および/usr/bin/baz
は、単一の構成ファイルfoo
を共有します。構成ファイルのモードは0640
です。これは、機密情報を保持するためです。 1つのプログラムはbar:bar
(つまり、ユーザーbar、グループbar)として実行されます。もう1つはbaz:baz
です。 ユーザーの変更はオプションではありませんで、グループを変更することも好ましくありません。
単一の構成ファイルを/etc/bar/foo
および/etc/baz/foo
としてハードリンクしたいと思います。ただし、このファイルは、私の知る限り、root:bar
またはroot:baz
のいずれかに属している必要があるため、失敗します。
考えられる解決策:メンバーがbarbaz
およびbar
である新しいグループbaz
を作成します。 foo
をroot:barbaz
に属させます。
それは私にとってかなり強引な解決策のように見えます。 2つのプログラム間で構成ファイルfoo
を共有する、より簡潔で簡単な方法はありませんか?
今のところ、私はファイルの2つの同一のコピーを維持しています。これは機能しますが、明らかに間違っています。何が正しいでしょうか?
情報:私はUnixグループについてはほとんど経験がなく、setgid(2)については経験がありません。
ACLを使用すると、両方のグループのユーザーがファイルを読み取ることができます。
chgrp bar file
chmod 640 file
setfacl -m g:baz:r-- file
これで、bar
グループとbaz
グループの両方がファイルを読み取ることができます。
たとえば、モード640のbin:binが所有するファイルを次に示します。
$ ls -l foo
-rw-r-----+ 1 bin bin 5 Aug 17 12:19 foo
+
はACLセットがあることを意味するので、それを見てみましょう。
$ getfacl foo
# file: foo
# owner: bin
# group: bin
user::rw-
group::r--
group:sweh:r--
mask::r--
other::---
次の行を見ることができますgroup:sweh:r--
:つまり、グループsweh
の人がそれを読むことができます。
ねえ、それは私です!
$ id
uid=500(sweh) gid=500(sweh) groups=500(sweh)
そして、はい、ファイルを読み取ることができます。
$ cat foo
data
次のステートメントを再検討することをお勧めします。
可能な解決策:メンバーが
bar
およびbaz
である新しいグループbarbazを作成します。foo
をroot:barbaz
に属させます。それは私にとってかなり強引な解決策のように見えます。 2つのプログラム間で構成ファイル
foo
を共有する、より簡潔で簡単な方法はありませんか?
新しいグループを作成するのが重労働なのはなぜですか?これには、ACLに比べて次の利点があります。
/usr/bin/bar
と/usr/bin/baz
を使用して、これを架空のものとして表現しましたが、これら2つのプログラムが構成ファイルを共有できることは重要です。これは、プログラムが自然に関連していることを示唆しています。それらの新しいグループを作成すると、実際に存在し、動作(共通の構成ファイルを読み取るためのアクセス許可など)をトリガーする必要がある関係が記述されているように見えます。個人的には、ここではACLを強引な解決策と見なし、グループ化をより単純で伝統的なUnixの方法と見なしています。
これはAccess Control Lists(ACL)の典型的な使用法になると思います。両方のユーザー(またはグループ)を構成ファイルのACLに追加します。
/etc/foo root:root rw------- # Traditional Unix ownership and permission for foo
$ setfacl -m user:bar:rw-/etc/foo#ユーザーbarがfooを読み書きできるようにします $ setfacl -m user:baz:rw-/etc/foo#また、許可しますfoo を読み書きするユーザーbaz
最初にacl-packageをインストールする必要がある場合があります。
ファイルのモードを作る0660
(あるいは 0440
書き込みが必要ない場合)と所有権bar:baz
。次に、1つのプロセスがユーザー権限のおかげでファイルにアクセスでき、もう1つのプロセスがグループ権限のおかげでファイルにアクセスできます。これは、ACLが機能しないファイルシステムでも機能します。
まだ記載されていないので提出します。これはおそらくあなたが望むものではないかもしれませんが、同様の質問を持つ他の人々にとっては答えかもしれません。
「新しい」「クラウド」の方法は、すべての構成を 構成管理 システム( chef 、 puppet 、-など)で処理することです ansible )。その場合、どちらも構成管理システムからの単一ファイルのコピーであるため、サーバー上に2つの異なるが同一のファイルがあることは重要ではありません。
このようにすることの主な利点は、構成が versioned であり(構成の残りすべてと同様)、新しい同一またはほぼ同一のサーバーの配備が非常に簡単になるため、自動化。
(記録としては、構成管理を使用していないため、@ drgの回答のようにグループシステムを使用します)。