Хранение прав доступа к файлам в репозитории Subversion

StackOverflow https://stackoverflow.com/questions/56149

  •  09-06-2019
  •  | 
  •  

Вопрос

Как хранить права доступа к файлам в репозитории?Некоторые файлы должны быть доступны только для чтения, чтобы сторонние программы не могли их уничтожить, но после извлечения из репозитория они переходят в режим чтения и записи.

Я посмотрел в Google и нашел сообщение в блоге от 2005 года в нем говорится, что Subversion не сохраняет права доступа к файлам.В списке есть патчи и скрипты-перехватчики (все еще существует только один URL).Спустя три года Subversion все еще не сохраняет права доступа к файлам и являются ли хуки единственным способом добиться этого?(Я никогда не использовал хуки и предпочитаю использовать что-то встроенное в Subversion.)

Это было полезно?

Решение

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

Этот сценарий запускает вашу копию кодовой базы и устанавливает разрешения на чтение для определенных файлов.

В идеале сценарий должен читать список файлов из простого входного файла.Это упростит обслуживание и позволит другим разработчикам понять, какие файлы помечены как доступные только для чтения.

Другие советы

SVN имеет возможность хранить метаданные (характеристики) вместе с файлом.Свойства, по сути, представляют собой просто пары ключ/значение, однако есть некоторые специальные ключи, такие как «svn:executable». Если это свойство существует для файла, Subversion установит бит исполняемого файла файловой системы для этого файла при проверке файла.Хотя я знаю, что это не совсем то, что вы ищете, этого может быть достаточно (для меня было).

Существуют и другие свойства для окончания строки (svn:eol-style) и типа mime (svn:mime-type).

В SVN нет встроенного способа хранения прав доступа к файлам.

Оба asvn и патч из этого сообщения в блоге, похоже, уже существует (и размещено в официальном репозитории SVN), и это хорошо, но я не думаю, что в ближайшее время в основной версии будет реализована такая обработка метаданных.

SVN имел возможность обрабатывать символические ссылки и исполняемые файлы особенно давно, но ни один из них не работает должным образом на Win32.Я бы не стал ждать еще одной такой непереносимой функции (хотя реализовать ее поверх уже существующей системы метаданных не составит большого труда).

Я бы подумал о том, чтобы написать сценарий оболочки для ручной настройки прав доступа к файлам, а затем поместить его в репозиторий.

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

Поскольку добавление поддержки разрешений для SVN должно было бы учитывать несколько ОС и типов разрешений, NFS, POSIX, ARWED и RACF.

Это может привести к раздуванию SVN, возможному конфликту с конфликтующими типами разрешений, такими как NFS и POSIX, или открыть возможные эксплойты/уязвимости безопасности.

Есть несколько обходных путей.pre-commit, post-commit, start-commit используются чаще и являются частью системы Subversion.Но позволит вам контролировать разрешения с помощью любого языка программирования, который вам нравится.

Система, которую я реализовал, - это то, что я называю упаковщиком, который проверяет зафиксированные файлы рабочей копии, затем анализирует файл метаданных, в котором перечислены разрешения по умолчанию, необходимые для файлов/папок, а также любые изменения в них, которые вы также желаете.

Owner, Group, Folders, Files
default: <user> www-user 750 640
/path/to/file: <user> non-www 770 770
/path/to/file2: <user> <user> 700 700

Вы также можете расширить это и разрешить такие вещи, как автоматическое перемещение, переименование, маркировку редакций по типам, таким как альфа, бета, кандидат на выпуск, выпуск.

Что касается поддержки клиентов для извлечения файлов вашего репозитория с прикрепленными к ним разрешениями.Вам лучше подумать о создании установщика вашего пакета и предложить его в качестве ресурса.

Представьте себе, что люди настраивают свои репозитории с исполняемым файлом с правами root: www-user 4777.

Этот это обновленная ссылка на патч SVN, который правильно обрабатывает права доступа к файлам в стиле Unix.Я проверил на Fedora12 и, похоже, работает так, как ожидалось:

Я только что сохранил его /usr/bin/asvn и использую asvn вместо команды svn, если мне нужно, чтобы разрешения обрабатывались правильно.

Во многих ответах говорилось, что svn не хранит права доступа к файлам.Это может быть правдой, но мне удалось решить проблему с файлом dll без разрешений на выполнение, просто выполнив следующие действия:

  1. chmod 755 badpermission.dll
  2. mv badpermission.dll ../
  3. обновление свн
  4. svn rm badpermission.dll
  5. svn commit badpermission.dll -m «Удалить dll, чтобы исправить разрешения»
  6. mv ../badpermission.dll .
  7. svn добавить badpermission.dll
  8. svn commit badpermission.dll -m "Добавить dll обратно, чтобы исправить разрешения"
  9. rm badpermission.dll
  10. обновление свн
  11. badpermission.dll возвращается с разрешениями на выполнение

@morechilli:

Обертка asvn из моего предыдущего поста и блога в посте ОП, кажется, делают то, что вы предлагаете.Хотя он хранит разрешения в свойствах репозитория соответствующих файлов, а не в одном внешнем файле.

Я бы рекомендовал сгенерировать карту разрешений с помощью утилиты mtree (она есть во FreeBSD по умолчанию), сохранить карту в репозитории и, как уже упоминалось выше, в качестве первого шага запустить скрипт, который восстановит правильные права доступа к файлам из карты. процесс сборки.

Блокировка не решит эту проблему.Блокировка не позволяет другим редактировать файл.Это стороннее приложение, которое запускается как часть процесса сборки и пытается выполнить запись в файл, изменяя его, что нарушает процесс сборки.Поэтому нам нужно запретить программе изменять файл, который просто помечается как доступный только для чтения.Нам бы хотелось, чтобы эта информация хранилась в репозитории и передавалась по проверкам, веткам и т. д.

Грэм, svn не сохраняет разрешения.Ваш единственный вариант — завершить вызов на svn в сценарии.Скрипт должен вызвать svn с его аргументами, а затем установите разрешения.В зависимости от вашей среды вам может потребоваться вызвать скрипт svn и настроить свой PATH чтобы гарантировать, что он будет вызван.

Мне очень нравится идея Морчилли зарегистрировать список файлов и разрешений в самом репозитории.

Мы создали пакетный файл, чтобы сделать это за нас.Хотя я бы предпочел реальную поддержку в Subversion...

Рассмотрите возможность использования svn lock чтобы запретить другим писать в файл.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top