При настройке процедуры резервного копирования для настройки ZOPE / ZEO я столкнулся с той же проблемой с разрешениями BLOB-объектов.
После попытки применить патч обезьяны, который написал Микко (что не так просто), япредложил «настоящий» патч для решения проблемы.
Патч, предложенный Мартин, не завершен, он все еще не устанавливает правильный режим для файлов BLOB-объектов.
Так вот мое решение:
1.) Создайте патч, содержащий:
Index: ZODB/blob.py
===================================================================
--- ZODB/blob.py (Revision 121959)
+++ ZODB/blob.py (Arbeitskopie)
@@ -337,11 +337,11 @@
def create(self):
if not os.path.exists(self.base_dir):
- os.makedirs(self.base_dir, 0700)
+ os.makedirs(self.base_dir, 0750)
log("Blob directory '%s' does not exist. "
"Created new directory." % self.base_dir)
if not os.path.exists(self.temp_dir):
- os.makedirs(self.temp_dir, 0700)
+ os.makedirs(self.temp_dir, 0750)
log("Blob temporary directory '%s' does not exist. "
"Created new directory." % self.temp_dir)
@@ -359,8 +359,8 @@
(self.layout_name, self.base_dir, layout))
def isSecure(self, path):
- """Ensure that (POSIX) path mode bits are 0700."""
- return (os.stat(path).st_mode & 077) == 0
+ """Ensure that (POSIX) path mode bits are 0750."""
+ return (os.stat(path).st_mode & 027) == 0
def checkSecure(self):
if not self.isSecure(self.base_dir):
@@ -385,7 +385,7 @@
if create and not os.path.exists(path):
try:
- os.makedirs(path, 0700)
+ os.makedirs(path, 0750)
except OSError:
# We might have lost a race. If so, the directory
# must exist now
@@ -891,7 +891,7 @@
file2.close()
remove_committed(f1)
if chmod:
- os.chmod(f2, stat.S_IREAD)
+ os.chmod(f2, stat.S_IRUSR | stat.S_IRGRP)
if sys.platform == 'win32':
# On Windows, you can't remove read-only files, so make the
Вы также можете посмотреть патч здесь -> http://pastebin.com/wNLYyXvw
2.) Сохранитеpatch под именем 'blob.patch' в корневом каталоге вашего компоновщика
3.) Расширьте свою конфигурацию компоновки:
parts +=
patchblob
postinstall
[patchblob]
recipe = collective.recipe.patch
egg = ZODB3
patches = blob.patch
[postinstall]
recipe = plone.recipe.command
command =
chmod -R g+r ${buildout:directory}/var
find ${buildout:directory}/var -type d | xargs chmod g+x
update-command = ${:command}
Разделы postinstall устанавливают необходимые права на чтение групп для уже существующих BLOB-объектов.Обратите внимание, что разрешение на выполнение также должно быть предоставлено папкам больших двоичных объектов, эта группа может входить в каталоги.
Я тестировал этот патч с ZODB 3.10.2 и 3.10.3.
As MartijnПредполагается, что это должно быть конфигурируемым и напрямую частью ZODB.