5

post-receive フックを sudo として実行する必要がある git リポジトリがあります。これをテストするためにコンパイルしたバイナリは次のようになります。

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main() {
   int ret;
   ret = setuid(geteuid());
   if(!ret) {
      fprintf(stderr, "error setting uid %d \n", ret);
   }       
   system("[...command only sudo can access...]");

   return 0;
}

はのgeteuid()所有者 ID を取得し、post-receivesetuid を試みます。これを任意のユーザー(スーパーユーザーを含む)で実行すると、スクリプトがルートとして正しく実行されます。ただし、git フックによってトリガーされると、システムは uid の設定に失敗します。実行してみchmod u+s post-receive ましたが、他の構成もいくつか試しましたが、アイデアが不足しています。git がトリガーする場合を除いて、すべてのケースで機能する理由はありますか?

ところで、プラットフォーム Ubuntu Server 9.04(2.6.28-15)、git1.6.0.4、gcc バージョン 4.3.3 (Ubuntu 4.3.3-5ubuntu4)

4

4 に答える 4

1
  1. gitリポジトリが保存されているファイルシステムは、nosuidオプションを使用してマウントできます。
  2. sshをプッシュオーバーしている場合、ssh(CAP_SETUIDなし)で呼び出されたコマンドに対してsuid機能が無効になっている可能性があります。

いずれにせよ、あなたがやろうとしていることは非常にお勧めできません。

于 2010-07-02T04:35:57.757 に答える
1
  1. プログラムをデーモンとして実行します。
  2. ソケット/名前付きパイプ/msgq で入力を待ちます。
  3. フックで、操作を実行するために必要な情報を含むメッセージをデーモンに送信します。
  4. 必要に応じて、ステータスとともにメッセージをフックに送り返します。

これにより、管理が容易になり、適切に保護される可能性があります。

于 2010-07-29T03:50:05.030 に答える
0

コマンドプロンプトからプログラムを実行してみてください

于 2010-02-16T06:33:58.893 に答える
0

ブートストラップ スクリプトを作成してみてください。すなわち

#/usr/bin/sh
./your_program

次に、スクリプトをフックにします。

于 2010-08-29T07:15:20.283 に答える