Не удается открыть файл '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 для папок репозитория. Как мне установить это / какие команды?
9 ответов
Это распространенная проблема. Вы почти наверняка столкнетесь с проблемами с разрешениями. Чтобы решить это, убедитесь, что apache
пользователь имеет доступ на чтение / запись ко всему вашему хранилищу. Чтобы сделать это, chown -R apache:apache *
, chmod -R 664 *
для всего в вашем хранилище SVN.
Кроме того, смотрите здесь и здесь, если вы все еще застряли.
Обновление, чтобы ответить на дополнительный вопрос ОП в комментариях:
Строка "664" является восьмеричным (основание 8) представлением разрешений. Здесь есть три цифры, представляющие разрешения для владельца, группы и всех остальных (иногда называемых "миром"), соответственно, для этого файла или каталога.
Обратите внимание, что каждая цифра 8 основания может быть представлена 3 битами (000 для "0" - "111" для "7"). Каждый бит означает что-то:
- первый бит: разрешения на чтение
- второй бит: права на запись
- третий бит: выполнить разрешения
Например, 764 для файла будет означать, что:
- владелец (первая цифра) имеет права на чтение / запись / выполнение (7)
- группа (вторая цифра) имеет разрешение на чтение / запись (6)
- все остальные (третья цифра) имеют разрешение на чтение (4)
Надеюсь, что все проясняется!
Это проблема разрешения. Это не "классические" права на чтение / запись для пользователя apache, а selinux.
Apache не может записывать в файлы, помеченные как httpd_sys_content_t
они могут быть прочитаны только Apache.
У вас есть 2 возможности:
пометить файлы репозитория SVN как
httpd_sys_content_rw_t
:chcon -R -t httpd_sys_content_rw_t /path/to/your/svn/repo
установить selinux логическое
httpd_unified --> on
setsebool -P httpd_unified=1
Я предпочитаю 2-й вариант. Вы также можете играть с другими булевыми значениями selinux, связанными с httpd
:
getsebool -a | grep httpd
У меня тоже недавно была эта проблема, и именно 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) Установите это на on, и ваш пост-коммит будет работать с 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/
У меня просто была эта проблема
- Наличие нескольких пользователей, использующих один и тот же репо, вызвало проблему
- Выйти из любого пользователя, используя репо
Надеюсь это поможет
В дополнение к разрешениям хранилища, /tmp
Каталог также должен быть доступен для записи всем пользователям.
3 шага, которые вы можете выполнить
chmod -R 775 <repopath> --->permissions for repository
chown -R apache:apache <repo path> ---> change owner as like svn conf file
chcon -R -t httpd_sys_content_t /<repo path> ----> change security context for svn repositary
Попробуйте отключить SELinux этой командой /usr/sbin/setenforce 0
, В моем случае это решило проблему.