Не удается открыть файл 'svn / repo/db / txn-current-lock': отказано в разрешении

Я настроил сервер Linux и установил на нем Apache и SVN и dav_svn. Теперь, когда я пытаюсь загрузить https://x.x.x.x:x/svn/repo с черепахой SVN я получаю

Can't open file '/server/svn/repo/db/txn-current-lock': Permission denied

Я правильно настроил свой SSL (я могу проверить, никаких проблем, даже удаленно из-за переадресации портов).

Я предполагаю, что это связано с владением Linux папками репозитория, как я должен установить это/ каковы команды?

8 ответов


Это распространенная проблема. Вы почти наверняка сталкиваетесь с проблемами разрешений. Чтобы решить эту проблему, убедитесь, что apache пользователь имеет доступ для чтения/записи ко всему репозиторию. Для этого chown -R apache:apache *, chmod -R 664 * для всего под вашим репозиторием svn.

Также см. здесь и здесь если вы все еще застряли.


обновление, чтобы ответить на дополнительный вопрос OP в комментарии:

строка "664" представляет собой восьмеричное (базовое 8) представление разрешений. Здесь есть три цифры, представляющие разрешения для владелец, группа и все остальное (иногда называемый "мир"), соответственно для этого файла или каталога.

обратите внимание, что каждая базовая цифра 8 может быть представлена 3 битами (000 для " 0 "через 111 для "7"). Каждый бит означает что-то:

  • Первый БИТ: чтение
  • второй бит разрешения записи
  • третий бит: выполнить разрешения

например, 764 в файле будет означать, что:

  • владелец (первая цифра) имеет разрешение на чтение/запись/выполнение (7)
  • группа (вторая цифра) имеет разрешение на чтение/запись (6)
  • все остальные (третья цифра) чтение (4) разрешите!--32-->

надеюсь, что проясняет ситуацию!


это проблема разрешения. Это не" классические " разрешения на чтение/запись пользователя apache, а selinux one.

Apache не может писать в файлы, помеченные как httpd_sys_content_t Они могут быть прочитаны только apache.

у вас есть 2 возможности:

  1. помечать файлы репозитория svn как httpd_sys_content_rw_t:

    chcon -R -t httpd_sys_content_rw_t /path/to/your/svn/repo
    
  2. установить selinux boolean httpd_unified --> on

    setsebool -P httpd_unified=1
    

Я предпочитаю 2-й вариант. Вы также можете играть с другими булевыми selinux, связанными с httpd:

getsebool -a | grep httpd

у меня также была эта проблема недавно, и это был SELinux, который вызвал ее. Я пытался заставить post-commit subversion уведомить Дженкинса, что код изменился, чтобы Дженкинс сделал сборку и развертывание в Nexus.

мне пришлось сделать следующее, чтобы заставить его работать.

1) Сначала я проверил, включен ли SELinux:

    less /selinux/enforce

это выведет 1 (для включения) или 0 (для выключения)

2) временное отключение SELinux:

    echo 0 > /selinux/enforce

теперь проверьте, работает ли он сейчас.

3) Включить SELinux:

    echo 1 > /selinux/enforce

измените политику для SELinux.

4) сначала просмотрите текущую конфигурацию:

    /usr/sbin/getsebool -a | grep httpd

Это даст вам: httpd_can_network_connect -- > off

5) Установите это в положение on, и ваша post-commit будет работать с SELinux:

    /usr/sbin/setsebool -P httpd_can_network_connect on

теперь он должен снова работать.


например, в debian

sudo gpasswd -a svn-admin www-data
sudo chgrp -R www-data svn/
sudo chmod -R g=rwsx svn/

У меня просто была эта проблема

  1. наличие нескольких пользователей, использующих одно и то же РЕПО, вызвало проблему
  2. выход из системы каждый другой пользователь с помощью РЕПО

надеюсь, что это помогает


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


3 шага вы можете под паром

  1. chmod -R 775 <repopath>  
    --->permissions for repository
    
  2. chown -R apache:apache  <repo path>  
    ---> change owner as like svn conf file
    
  3. chcon -R -t httpd_sys_content_t /<repo path>  
    ----> change security context for svn repositary
    

попробуйте отключить SELinux командой /usr/sbin/setenforce 0. В моем случае это решило проблему.