• 締切済み

subversionのpost-commitでsvn upを行うと、パーミッションエラー。

クライアントからコミットした際に、post-commitで、svnでチェックアウトしている/var/www/sampleprojectディレクトリを"svn up"コマンドで更新をしたいと思っております。 しかし、tortoiseSVNからコミットすると、以下のエラーが表示されてしまいます。 <pre> エラー: post-commitフックが失敗しました (終了コード: 1)。出力: エラー: svn: ファイル '/var/www/sampleproject/.svn/lock' を開けません: 許可がありません </pre> post-commitの内容: <pre> #!/bin/bash REPOS="$1" REV="$2"LOG=/var/log/svn.log export LANG=ja_JP.UTF-8 echo $2 > ${LOG} whoami >> ${LOG} /usr/bin/svn up /var/www/enjoynight >> ${LOG} </pre> post-commitで出力したログを確認してみると、"svn up"を実行しているユーザーは"user1"でした。 /var/www/sampleprojectのオーナーはapacheユーザー(apache.apache)です。 ためしに、"user1"にapacheグループ権限を追加してみましたが、結果は変わりませんでした。 一日中悩んでも解決出来ませんでした。 もしよろしければ、どなたか解決策をご教授頂けないでしょうか。 サーバーOS:CentOS5.3 Subversion:1.6.2 Apache:2.2.3 passenger:2.2.3 Ruby:1.8.7 Rails:2.3.2 クライアントOS:Windows Vista tortoiseSVN:1.6.5 リポジトリへの接続方法:svn+ssh コミットユーザー:user1

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.4

>## 公開ディレクトリに.svnも入ってしまうので、svn updateよりは、面倒でもsvn exportにすべき…と思いますが。 とか書いたら…タイムリーにスラッシュドットに… http://slashdot.jp/security/article.pl?sid=09/09/25/0246256 コレだと、cgiもソースファイルとか抜かれるかも知れない…ですな。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

>オーナー:apache.apache >パーミッション:全て755 「グループに対して書き込み禁止」ですよね? でしたらやはりパーミッションエラーかと。 user1はapacheグループに属していて、しかしグループに対する書き込み権限はありません。 よって、 /var/www/sampleproject/.svn ディレクトリ内にファイルの作成などはできませんのでlockファイルの作成もできません。 /var/www/sampleproject/.svnディレクトリを775にすると、 lockファイルなどの作成は可能でしょうが、今度は /var/www/sampleproject のsvn updateでファイルの書き込みができません。 /var/www/sampleproject以下の既存ファイルと既存ディレクトリにグループの書き込み権限を設定…で対処できるとは思いますが。 # と、No.2の回答で書いたのですが…。 [root@localhost tmp]# ls -al /var/www/enjoynight 合計 32 drwxrwxr-x 3 apache apache 4096 9月 23 23:35 . drwxr-xr-x 13 root  root  4096 9月 23 23:22 .. drwxrwxr-x 6 apache apache 4096 9月 23 23:35 .svn -rw-rw-r-- 1 svn  svn   20 9月 23 23:35 test.html [root@localhost tmp]# svn+sshではなかったので…svnserveを動作しているユーザー&グループでファイル作成されていました。 # checkoutした時はファイル無かったもので…。 ## 公開ディレクトリに.svnも入ってしまうので、svn updateよりは、面倒でもsvn exportにすべき…と思いますが。 ## 削除ファイルを考えると、一度全削除してからexportの方がよいかも。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

パーミッションの問題…のようですね。 ls -la /var/www/sampleproject とした場合、どう表示されるでしょうか? とりあえず、最初からやり直すとすると…… ・apacheグループにuser1を追加する。 ・rootユーザでumask 0002を実行してからsvnからチェックアウトを実行する。  http://www.stackasterisk.jp/tech/engineer/permission01_02.jsp ・チェックアウト後にオーナーを変更する。  chown -R apache:apache /var/www/sampleproject で回避できませんかね? 先のlsコマンドでグループに書き込み権限付いていれば、オーナーの変更だけで済むかも知れませんが。 chmodの再帰的変更、ファイルとディレクトリでパーミッションを替えるのは面倒…だったかな。 chmod -R g+w /var/www/sampleproject でいけるか……

y-nori
質問者

補足

回答ありがとうございます。 >ls -la /var/​www/sampleproject 試験的にに以下の状態にしていますが、改善されません。 オーナー:apache.apache パーミッション:全て755 >・apacheグループにuser1を追加する。 apacheグループにuser1を追加してみましたが、同様の結果となりました。 どうも、svn up コマンド時に.svn/lockファイルを生成しているようなのですが、そのファイルに対してアクセス出来ないようです。 パーミッションエラー後に".svn/lock"ファイルを確認しようと試みても、既に削除されてしまっているため、".svn/lock"がどのオーナーで作成されているか不明です。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

sshなどで接続して、ターミナルから /usr/bin/svn up /var/​www/enjoynight を実行した場合は成功するのでしょうか? またターミナルで実行した場合とフックスクリプトで実行した場合の環境変数の違い…とか。 /var/www配下ということなので…SELinuxで制限されていたりしませんか?

y-nori
質問者

補足

回答ありがとうございます。 # プロジェクト名を置換するのを忘れていました。 # enjoynight → sampleprojectとします。 ・ターミナルから/usr/bin/svn up /var/www/sampleprojectを行った場合 ⇒ root以外は失敗する。 ・ターミナルからpost-commitを直接たたいた場合。 ⇒ root以外は失敗する。 SELinuxは無効にしてあります。 パーミッションエラーのようですが、 .svn/lockをどのLinuxユーザーが実行しているのかさえわからずです。

関連するQ&A

専門家に質問してみよう