Не удается открыть файл 'svn / repo / db / txn-current-lock': разрешение запрещено - PullRequest
48 голосов
/ 06 июня 2009

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

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

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

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

Ответы [ 8 ]

66 голосов
/ 06 июня 2009

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

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

<Ч />

Обновление для ответа на дополнительный вопрос ОП в комментариях:

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

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

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

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

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

Надеюсь, что все прояснилось!

13 голосов
/ 29 мая 2011

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

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. set selinux boolean httpd_unified --> on

    setsebool -P httpd_unified=1
    

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

getsebool -a | grep httpd
3 голосов
/ 14 марта 2013

У меня тоже недавно была эта проблема, и именно SELinux вызвал ее. Я пытался получить пост-фиксацию 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) Включите эту функцию, и ваш пост-коммит будет работать с SELinux:

    /usr/sbin/setsebool -P httpd_can_network_connect on

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

1 голос
/ 17 февраля 2012

например в Debian

sudo gpasswd -a svn-admin www-data
sudo chgrp -R www-data svn/
sudo chmod -R g=rwsx svn/
0 голосов
/ 18 мая 2017

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
    
0 голосов
/ 16 июля 2013

У меня только что была эта проблема

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

Надеюсь, это поможет

0 голосов
/ 29 апреля 2012

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

0 голосов
/ 14 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...