1

hook.php次のようなPHPファイルがあります。

<?php `cd .. && git pull`;

ファイルはにあります/var/www/oliverash.me/site/。ただし、プルする必要があるgitリポジトリはです/var/www/oliverash.me/./siteApacheがドキュメントルートとして参照するフォルダです。

ブラウザでファイルを実行すると、リポジトリがプルされていないようです。

結果をエコーし​​ようとしましたが、ページが空白です。

<?php echo `cd .. && git pull`;

4

4 に答える 4

5

コメントを投稿することはできませんが、*nixシステムを実行していると想定しています。apache / phpデーモンにアクセスする権限がない場合、権限が拒否されます.git/。ディレクトリの所有者/グループを.git/再帰的に変更できます。または、すべてのchmod -R o+rw .git/*人(つまり、所有者ではなく、グループではない)にgitディレクトリでの読み取りと書き込みへのアクセスを許可します。これにより、取得しているアクセス許可エラーがクリアされます。

編集 質問を読み直すだけなので、次のことはおそらく必要ありませんが、念のために残しておきます。

http://myurl/.git/ただし、そうすることで、サーバーにアクセスできる人は誰でも、 etcにアクセスしてそれらにアクセスできるようになることを覚えておく必要があります。したがって、セキュリティ上の予防措置として、次の.htaccessようなファイルを追加します。

order deny, allow
deny from all

ディレクトリ内にある.gitため、apacheはWebブラウザからそこにあるすべてのものへのアクセスを拒否します。

于 2012-10-15T06:52:02.603 に答える
1

あなたは確かに許可の問題を抱えています、多分カップル。

  1. phpページはapacheユーザーとして実行されます
  2. そのユーザーは、問題のgitリポジトリに書き込むことができる必要があります
  3. そのユーザーは、問題のプルを実行できる必要があります
  4. プルのソースを指定していませんが、たとえばgit:またはssh:repoの場合、そのユーザーはリモートにアクセスしてリモートにアクセスするための権限(キー、ユーザー名/パスワードなど)が必要になります。からプルします。
  5. /var/www/.sshが必要であることがわかりました。したがって、ssh://リモートを使用しています。これは問題ありませんが、ユーザーapache(/ var / wwwはユーザーapacheのホームディレクトリ)として実行されているため、を探しています。 /var/www/.sshのキーは検出されないため、失敗します。ソリューション:
    1. sudoを使用して、permsを持つユーザーに切り替え、そのユーザーとしてgit pullを実行します(phpでは「sudogit pull」を実行し、/ etc/sudoersにユーザーapacheが「gitpull」を実行できるようにする行を入力します' 指図)
    2. .ssh / configファイルを設定します。これはHost、リモートであり、Userログインに使用するaIdentityであり、リモートがsshでプルできる秘密鍵へのパスであるを指定します。
于 2012-10-16T14:49:36.030 に答える
1

ルートまたはアクセス可能な場所からwebhook.phpを作成します

$ result = exec( "cd / path / to / repo && git pull origin branch");

権限が775であり、ファイルのユーザーであり、サイトディレクトリがwww-dataの所有者であることを確認してください

于 2020-09-11T12:21:55.150 に答える
0

コマンドを実行しているユーザーに問題があります。

さまざまなコメントによると、システムコマンドは apache(homedirは/var/www)という名前のユーザーとして実行されます。whoamiこれは、PHPスクリプト内からコマンドを実行することで確認できます。

<?php echo `whoami`;

名前が付けられたそのユーザーapacheは、通常、Webサーバーが実行されているユーザーであり、PHPが実行され、シェルコマンドが実行されます。

明らかに、他のユーザーとしてコマンドを実行したいのですが、これまでのところ、どのユーザーの情報を共有していません。

適切なユーザーの下でshellコマンドを実行すると、問題は解決するはずです。

Linuxシステムでは、別のユーザーの下で他のコマンドを実行するコマンドは、別のコマンドと呼ばれsudoますsu

または、suexecを使用して、Webサーバーユーザーとは異なるユーザーでPHPを実行することもできます。

いずれの場合も、gitコマンドを実行できるユーザーがいることを確認する必要があります。自分でテストした方法がわかりません。サーバーボックスにSSHで接続し、手動でgit pullを実行して、ユーザー名、ホームディレクトリなどの必要なデータを収集するのが最善の方法です。

于 2012-10-16T14:24:23.623 に答える