Обновление Subversion из PHP в Windows - связанные с разрешениями (доступ запрещен) - PullRequest
2 голосов
/ 30 сентября 2011

Я написал скрипт PHP, который обновляет рабочую копию SVN.

Он отлично работает на моей машине для разработки (W2k3 Server), но я не могу заставить его работать на рабочем сервере (W2k8 Server). Я использую последние версии Collabnet Subversion (1.6.17).

Вот код PHP:

$command = 'svn update C:\inetpub\wwwroot\mysite --config-dir C:\Windows\Temp'; 

$response = array();
$handle = popen("$command 2>&1", 'r');
$read = '';
while( $read = fread( $handle, 20096 ) ) 
{
    $response[] = $read;
}
pclose( $handle );
flush();

echo '<h2>Command</h2><p> ' . $command . '</p>';
echo '<h2>Response</h2><p>' . implode( '<br />', $response ) . '</p>';

Когда я запускаю ту же команду из командной строки, она работает нормально. Но когда я запускаю его через IIS, я получаю:

svn: Не удается открыть файл 'C: \ inetpub \ wwwroot \ mysite.svn \ lock': доступ запрещен.

Предположительно, мне нужны повышенные разрешения, но я не знаю, как это реализовать.

Я пытался предоставить учетной записи _IUSR полный контроль над папкой, содержащей svn и папки C: \ inetpub \ wwwroot \ mysite.svn \, но это не имеет значения.

Спасибо

Ответы [ 4 ]

2 голосов
/ 05 октября 2011

Подобные проблемы возникали с SVN и Windows Server 2008. Проблема связана с UAC, который обычно не позволяет кому-либо изменить файл, если он не является владельцем файла.В случае SVN проблема обычно заключалась в том, что один пользователь выполнял начальную проверку, создавая папки .svn и связанные биты.Затем другой пользователь зашел на svn up и получил проблемы с доступом на уровне ОС для изменения файлов базы данных SVN.

К сожалению, лучшее исправление, к которому мы могли прийти, это отключение UAC.На самом деле решено несколько других проблем, и это действительно имеет смысл на серверах.Если он выполняется как запланированное задание, вы можете попробовать «запустить с наивысшими привилегиями», но повышение этого значения не имеет большого смысла для веб-приложения.

2 голосов
/ 05 октября 2011
  • Учетная запись IUSR_COMPUTERNAME должна иметь доступ на чтение / запись к папке C:\inetpub\wwwroot\mysite.svn, если это извлечение.
  • Далее (не уверен), вам может потребоваться предоставить доступ на запись кпапка в свойствах IIS для виртуальной папки C:\inetpub\wwwroot\mysite.svn.
1 голос
/ 10 октября 2011

Я думаю, вам нужно специально предоставить права на чтение / запись пользователю, под которым работает PHP. В моем случае php работает как модуль Apache, поэтому он работает под той же учетной записью. Я менее знаком с вашей настройкой, но основная идея та же. После того, как вы определили, под какой учетной записью работает PHP, предоставьте ему права на запись в файл блокировки, и ваша проблема должна исчезнуть.

Я НЕ РЕКОМЕНДУЮ отключать UAC на рабочем сервере !! КОГДА-ЛИБО !!! Вы хотите предоставить наименьшее количество разрешений для наименьшего количества пользователей наименьшему количеству необходимых ресурсов.

НЕ удаляйте всю защиту своей учетной записи пользователя для записи в файл блокировки !!! Вместо этого предоставьте одно разрешение на запись. Не полный контроль. Предоставьте это единственному пользователю, который нуждается в нем (вероятно, в локальной системной учетной записи). Предоставьте его для конкретного файла (C: \ inetpub \ wwwroot \ mysite.svn \ lock), в который он должен записать.

Этот подход не позволяет вам открыть дыру в безопасности, которая может быть использована злоумышленником!

0 голосов
/ 28 октября 2011

Спасибо всем.В конце концов, все эти ответы помогли.

Мне нужно было сделать несколько вещей:

  • Выполнить очистку SVN

  • ОказалосьUAC, если доступ запрещен при настройке разрешений

  • Для папки верхнего уровня .svn необходимы разрешения на запись для IIS_IUSR

  • Все папки .svn требуют чтения/ Права на запись для группы «Пользователи».Однако очевидного способа сделать это нет, поэтому необходимо установить разрешения для всего каталога сайта.

После чего PHP-сценарий смог выполнить команду обновления svn.Уф!

...