Не удается открыть файл '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 возможности:
-
помечать файлы репозитория svn как
httpd_sys_content_rw_t
:chcon -R -t httpd_sys_content_rw_t /path/to/your/svn/repo
-
установить 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/
У меня просто была эта проблема
- наличие нескольких пользователей, использующих одно и то же РЕПО, вызвало проблему
- выход из системы каждый другой пользователь с помощью РЕПО
надеюсь, что это помогает
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