11

コミットが受信されたときに、マシン上のリポジトリの別のクローンが更新されるように、git post-receive フックを設定しようとしています (つまり、 を実行しますgit pull origin master)。私はリポジトリを提供するために gitosis を使用しています。gitosisそのため、受信時に更新したいリポジトリはwww-data. これを行うにはどうすればよいですか?

スクリプトについて聞いたことsetuidがありますが、これがセキュリティ リスクになるかどうかはわかりません。それがセキュリティ上のリスクでない場合、どうすればこれを行うことができますか? スクリプトを所有しwww-data、誰でも実行できるようにして、setuid ビットを有効にするようなことをすると思いますか? このスクリプトは、リポジトリを更新するだけなので、ほとんど無害だと思いますが、確認したいと思います。ありがとう!

編集:これを使用してこれを行う方法はありますsudoか? それはより安全setuidでしょうか?つまり、ユーザーが root でなくても大きな問題はないと思いますが、スクリプトを実行するsetuidには、いくつかの手順を踏まなければならないように思えます。setuid

2番目の編集:魔法と. 代わりにこれを ServerFault に投稿するべきだったのかもしれませんが、少なくとも私はこの努力から少し学びました。/etc/sudoerssudo -u

4

2 に答える 2

14

IMHOこれはserverfaultにあるはずですが、それでも答えはここにあります。

追加:

gitosis ALL=(www-data) NOPASSWD: /path/to/git

/etc/sudoers へ

コマンドを次のように実行しますsudo -u www-data <whatever the command is>

于 2009-12-23T07:50:20.377 に答える
4

私はgitユーザー名を使用していることに注意してください。したがって、 gitosisまたはその他のユーザー名を使用している場合は、自分のユーザー名を入力してください!

rootユーザーのコンソールで、次のコマンドを実行します。

visudo

「vi」エディタが開きます。次の行を追加します。

Defaults:git    !authenticate
git ALL=(www-data) ALL

その結果、ファイル (「visudo」を呼び出して「vi」エディターで開く) は次のようになります。

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults    env_reset
Defaults:git    !authenticate

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL
git ALL=(www-data) ALL


# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

次に、CTRL+O を押してファイルを保存し、Enter を押してファイル名 (bla bla bla) を受け入れ、CTRL+X を押して「vi」エディターを閉じます。

出来上がり!これで、 gitユーザーはwww-dataユーザーとしてコマンドを実行できます。

sudo -u www-data git pull origin master
于 2012-06-21T17:35:04.903 に答える