Обновление Subversion с PHP на Windows-связанные разрешения (доступ запрещен)


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

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

Вот код PHP:

$command = 'svn update C:inetpubwwwrootmysite --config-dir C:WindowsTemp'; 

$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:inetpubwwwrootmysite.svnlock': Доступ запрещен.

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

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

Спасибо

4 2

4 ответа:

У

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

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

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

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

Я не рекомендую отключать UAC на рабочем сервере!! Никогда!!! Ты требуется предоставить наименьшее количество разрешений для наименьшего числа пользователей на наименьшее количество необходимых ресурсов.

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

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

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

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

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

  • Включение UAC, если доступ запрещен при установке разрешений

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

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

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