Как указать, к какому владельцу / группе принадлежит программно созданная папка

994
Chris Rockwell

Сначала немного предыстории: я занимаюсь созданием сайтов на Drupal на машине с Windows 7. Drupal имеет модуль изображений, который, в общем, позволяет кэшировать изображения. Когда вы создаете стиль изображения, модуль создает каталог. Например, если вы создадите стиль, my_image_styleон автоматически создаст папку sites/default/files/img/styles/my_image_style/and/some/other/folders/beneath. Однако созданный каталог имеет владельца: группу Administrators:Systemс разрешением d--------+. Всё остальное, вплоть до рута, есть chrisrockwell:None. Apache (это настройка WAMP5) тоже chrisrockwell:None.

Модуль Drupal должен создавать файлы в этом каталоге, но не может из-за проблем с разрешениями.

Итак, как в этой настройке указать, какому пользователю: группа принадлежит созданный каталог?

Я не уверен, имеет ли это эффект, но я делаю в основном все в Cygwin (перемещение, открытие, vim).

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

ОБНОВЛЕНИЕ: Если я chmod 777 весь каталог сайта, единственная папка, в которой я получаю разрешение, это папка image_style, созданная скриптом Drupal.

0
Обратите внимание, `d --------- +` не означает, что нет никаких разрешений; `+` означает, что существует список доступа, связанный с каталогом, который не может быть отображен как простые разрешения. Darth Android 10 лет назад 0
@DarthAndroid Я думаю, это связано с Windows ACL. Даже если я chmod -R 777 весь каталог, работающий от имени администратора, разрешения по-прежнему -rw-r - r--. Я не знаю много о ACL, поэтому у меня возникли проблемы с устранением неполадок Chris Rockwell 10 лет назад 0
Я зашел так далеко, что дал каждому пользователю, каждой группе полный контроль над этим конкретным каталогом, но безрезультатно. Chris Rockwell 10 лет назад 0

2 ответа на вопрос

1
Matt

I've seen similar issues with other applications in Windows setting the group wrong when running as Administrator. I don't know how to fix the original directory creation issue, but you can reassign the owner and group for all the directories in cygwin using chown:

chown -R chrisrockwell:none my_image_style 
Спасибо, я уже chown'd каталог. Несмотря на то что chrisrockwell: None теперь не является владельцем: группа, модуль Drupal по-прежнему не может читать / писать. Chris Rockwell 10 лет назад 0
0
Ярослав Рахматуллин

Cygwin замечания

Это скорее обходной путь, чем ответ.

Я недавно столкнулся с похожими проблемами с Cygwin. Причина, по-видимому, заключается в неправильной конфигурации отображения пользователей и групп Windows на пользователей и группы Cygwin. В частности, я видел, что вкладка «Безопасность» в диалоговом окне «Свойства файла» содержит записи «Группа или Имя пользователя», такие как OWNER и GROUP. Я предполагаю, что они не поддерживаются окнами.

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

wraptor: ~/tmp/su/find-xargs $ icacls.exe . /reset /t processed file: . processed file: .\.search-dirs processed file: .\.test processed file: .\dirz processed file: .\foo processed file: .\moo processed file: .\sensors processed file: .\.test\test.java processed file: .\dirz\3.java processed file: .\foo\2.java processed file: .\moo\1.java processed file: .\sensors\light.java Successfully processed 12 files; Failed processing 0 files 

После этого иногда необходимо пересечь иерархию и сбросить биты разрешения:

find . -type d -exec chmod 755 {} + find . -type f -exec chmod 644 {} + 

После этих шагов файлы правильно «принадлежат» windows-me или пользователю-администратору, и собственные программы windows могут читать и записывать эти файлы как обычно.


Попытка ответа

Кроме того, следует упомянуть umask . Он устанавливается в пользовательской среде (или для доступа к программе) и управляет разрешениями создаваемых впоследствии файлов и папок.

например (bash)

umask 0022 

Это приведет к созданию всех файлов и папок с разрешениями 644 и 755.

например (питон)

$ cat moo.py import os for _ in ('0022', '0002', '0077'): os.umask(int(_, 8)) with open('moo.f-%s' % _, 'w') as f: f.writelines("moo\nfoo")  $ python moo.py; ll moo.f-* -rw-rw-r-- 1 1K 2013-07-24 07:46 moo.f-0002 -rw-r--r-- 1 1K 2013-07-24 07:46 moo.f-0022 -rw------- 1 1K 2013-07-24 07:46 moo.f-0077 

PHP имеет «идентичную» функцию umask .

Больше информации здесь: man 3p umask

Я посмотрю в Umask - спасибо. Ваша работа решила мою текущую проблему и позволяет мне вернуться к работе над этим модулем. Я отмечу, что мне пришлось запустить .exe из cmd, а не cygwin, чтобы это произвело эффект. Большое спасибо! Chris Rockwell 10 лет назад 0
Не упоминайте об этом :) Если вы поймете, что заставляет Cygwin блокировать разрешения Windows, я буду благодарен за комментарий. Ярослав Рахматуллин 10 лет назад 0