前提条件はやや複雑なので、内容は次のとおりです。
- シェルスクリプトで起動するプログラムがあります。
- シェルスクリプトは.jarファイルを介してプログラムを起動します。
- 私はこのプログラムがキャッシュを
/var/opt/
サブフォルダに保存したいと思います/var/opt/program/
。 - キャッシュされたコンテンツには直接アクセスできず、プログラムを介してのみアクセスできます。
- プログラムは、システムのすべてのローカルユーザーが使用できる必要があります。
私が思いついた主なアイデアは、キャッシュフォルダの内容を読み取って編集するために必要なすべての権限を持つグループを作成することでした。手動でグループにユーザーを追加したくないので、選択肢を探しています。私が理解したことが正しいなら、setgid
ビットは私にとって完璧でなければなりません。私の理解は次のとおりです。
- このビットが設定されているフォルダは、すべてのコンテンツがフォルダ
setgid
と同じ所有者グループを持つように強制し、すべてのサブフォルダが同じ規則に従うようにします。同時に、フォルダ所有者グループに含まれていないユーザーには追加の権限はありません。drwxrws--xマスクを持つフォルダは、他の人がその内容を編集して読み取ることを許可しません。。 - このビットが設定されているプログラムは
setgid
常に所有者グループの代わりに実行されるため、ユーザーはグループの権限を尊重するタスクを実行できます。
私のステップは次のとおりです。
- グループを作りました。私のグループ;
- フォルダを作成し、
/var/opt/program/
所有者グループを次に設定しました。私のグループ; setgid
フォルダにビットを設定しました。- プログラムシェルスクリプトの所有者グループを次に設定しました。私のグループ;
setgid
シェルスクリプトのビットを設定しました。
問題は、プログラムがroot権限なしでユーザーが起動したキャッシュフォルダにファイルを作成および編集できないことです。すべての提案は真剣に考慮されます。
UPD環境:
オペレーティングシステム:Ubuntu 16.04.2 LTS
答え1
- setgid ビットが設定されたフォルダは、すべてのコンテンツがフォルダと同じ所有者グループを持つように強制します。
はい。新しく作成されたファイルはディレクトリグループをインポートし、ファイルグループはもちろん後で変更される可能性があります。(フォルダではなくディレクトリと呼びます。)
- setgid ビットが設定されたプログラムは常に所有者グループの代わりに実行されます。
はい。ただし、setgidバイナリを介してのみファイルを生成する場合は、ディレクトリでsetgidを使用する必要はありません。 setgidプログラムは関連グループをデフォルトグループとして扱うため、生成されたすべてのファイルはデフォルトでそのグループ(呼び出し側ユーザーのグループではなく)によって所有されます。
- シェルスクリプトにsetgidビットを設定しました。
これはうまくいかない部分です。ほとんどのシステムは、解釈されたスクリプトのsetuidビットとsetgidビットを尊重しません。これは、多くのセキュリティ問題に簡単につながる可能性があるためです。
あなたがしなければならないのは、スクリプトを実行するCプログラムラッパーを作成し、ラッパーにgidを設定させるようにするか(好ましくは)同様の方法を使用して、ユーザーが他のグループのsudo
権限でスクリプトを実行できるようにすることです。 (sudo
潜在的に問題のある環境変数をクリーンアップするなどの操作が処理されました。)どちらの場合も、スクリプトとそのインタプリタがユーザーが変更できないディレクトリにあることを確認してください。
の場合、sudo
必須構成(in /etc/sudoers
)は次のとおりです。
username ALL=(:privgroup) /path/to/script
これにより、ユーザーはusername
グループとして実行できます。すべてのメンバーがスクリプトを実行できるようにする代わりに使用できます。ユーザーは、デフォルトで名前付きコマンドを次のように実行しようとしますが、それを許可しないスクリプトを実行する必要があります。ただし、このコマンドのラッパーを作成できます。/path/to/script
privgroup
%groupname
username
groupname
sudo -g privgroup /path/to/script
sudo
root
答え2
ほとんどのオペレーティングシステムはスクリプトでsetgidを無視します。ディレクトリは/var/opt/program
グループ書き込み可能でsetgidでなければなりません。ls -ld /var/opt/program
同様のものを出力する必要がありますdrwxrwsr-x 159 root mygroup 5406 Jun 15 10:25 /var/opt/program
。このプログラムを実行する必要がある一般(ルートではない)ユーザーは、mygroup
セカンダリグループを持っている必要があります。ユーザー固有の置換と同様のコマンドを使用してusermod
追加します。usermod -a -G mygroup LOGIN
ログインそしてユーザー名。または、/etc/group
mygroupとそのユーザーのカンマ区切りリストを使用して行を編集して追加します。たとえば、mygroup:x:5000:joe,frank,ellen,mark
ユーザーjoe、Frank、ellen、およびmarkがこのスクリプトを実行します。