グループフォルダを変更できるようにプログラムのsetgidビットを設定するにはどうすればよいですか?

グループフォルダを変更できるようにプログラムのsetgidビットを設定するにはどうすればよいですか?

前提条件はやや複雑なので、内容は次のとおりです。

  • シェルスクリプトで起動するプログラムがあります。
  • シェルスクリプトは.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/scriptprivgroup%groupnameusernamegroupnamesudo -g privgroup /path/to/scriptsudoroot

答え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/groupmygroupとそのユーザーのカンマ区切りリストを使用して行を編集して追加します。たとえば、mygroup:x:5000:joe,frank,ellen,markユーザーjoe、Frank、ellen、およびmarkがこのスクリプトを実行します。

関連情報