2012-05-24 16 views
10

私はこれが何度も前に尋ねられていることを知っていますが、私の状況は異なると思います。SVNフック前revprop変更が動作しない

ログメッセージの変更を可能にするために、私たちのSVNリポジトリにpre-revprop-changeフックを追加しようとしています。

私はこのエラーを得ていたpre-revprop-changeファイルを追加する前に:

$ svn propset -r 557 --revprop svn:log "New message!" https://myserver/repos/myrepo 
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent 
svn: At least one property change failed; repository is unchanged 
svn: Error setting property 'log': 
Repository has not been enabled to accept revision propchanges; 
ask the administrator to create a pre-revprop-change hook 

問題ありませんが、私は思いました。私はそれを追加します:

$ cd /var/www/svn/myrepo/hooks 

$ # Create the simplest hook possible 
$ echo '#!/bin/sh' > pre-revprop-change 
$ echo 'exit 0' >> pre-revprop-change 

$ # Check that it looks correct 
$ cat pre-revprop-change 
#!/bin/sh 
exit 0 

$ # Looks good, now make it executable 
$ chmod a+x pre-revprop-change 

$ # Check the permissions 
$ ls -al pre-revprop-change 
-rwxr-xr-x 1 apache apache 17 2012-05-24 12:05 pre-revprop-change 

$ # Run it, to make sure it runs, and check the error code 
$ ./pre-revprop-change 
$ echo $? 
0 

私はそれを動作させる必要がありますので、私が読んだ他のすべてによると、それに応じて。しかし、私は再びログメッセージを編集しようとすると、私はまだエラー(別のものにこの時間)を取得:

$ svn propset -r 557 --revprop svn:log "New message!" https://myserver/repos/myrepo 
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent 
svn: At least one property change failed; repository is unchanged 
svn: Error setting property 'log': 
Revprop change blocked by pre-revprop-change hook (exit code 255) with no output. 

注意すべきいくつかのポイントがあります。

1)リポジトリSELinuxサーバー(Fedoraコア10)でホストされています。おそらく、私はそれらのアクセス許可に関して何かする必要がありますか?リポジトリのWebDAV(リポジトリ名でhttps://に注意してください)を介してアクセスされている

$ ls -alZ pre-revprop-change 
-rwxr-xr-x apache apache unconfined_u:object_r:httpd_sys_content_rw_t:s0 pre-revprop-change 

2):ここではフックのSE権限があります。 WebDAV側でセットアップ前に変更が必要な変更はありますか?

答えて

8

数時間の試行後、私は答えを見つけました。そして、インターネット上の他の場所には存在しないようですので、私はここに投稿します...

問題はSELinuxによって引き起こされました(そこには大きな驚きはありません)。 apache(/usr/sbin/httpd)に前述のSE権限でフックスクリプトを実行するために必要な権限がないようです。それが実行するために取得するには、SELinuxのアクセス権が

$ chcon -t httpd_exec_t pre-revprop-change 

で変更する必要が(私が最初httpd_sys_script_exec_tにそれを変更しようとしたが、これは、スクリプトを実行するために取得するのに十分ではなかった。しかし、それは働いたhttpd_exec_tタイプ。 )

最終的な質問:これは安全なことですか?

+1

を、これは安全であるかどうか:)「安全」のあなたの基準に依存...しかし、はい、SELinuxができ、いくつかの微妙な問題を引き起こす可能性があります:誰でも同様の問題を持っているのであれば、単純にしようとすると、

しかし、ロギングを有効にして診断しました。 – 0xC0000022L

+0

ありがとうございます。ええ、サーバーがハック中心になるとは思っていませんが、私は大規模なセキュリティホールを開いただけではないことを確認したかったのです! 'httpd_sys_script_exec_t'を使ってもうまくいかなかった理由は分かりますか?それはドキュメントからそれが持っている必要があるようだ... –

+0

私はこれが働いていたはずだとも思ったでしょう。なぜ 'httpd_sys_script_exec_t'の代わりに' httpd_exec_t'でなければならないのか分かりません。しかし、SELinuxは、Apacheに出力されるスクリプトをどこか別の場所にあるスクリプトと区別できる可能性があります。あなたは 'svnserve'ではなくApacheを使用しています(Apacheはそれを代理するかもしれませんが)? – 0xC0000022L

1

CentOSでも同様のことがありました。問題はおそらく、ファイルを編集した後に変更して作業を開始したときのように、キャッシュのどこかにある可能性があります。

touch hooks/pre-revprop-change 
関連する問題