Назад | Перейти на главную страницу

Apache становится владельцем файла и папки

У меня есть сайт django, работающий на Ubuntu с apache2, настроенным с помощью mod_wsgi. В media (папка, в которую загружаются файлы, загруженные пользователем) принадлежит пользователю ubuntu (с доступом sudo) и группе media папка www-data. Когда новая папка или файлы создаются apache в папке мультимедиа, какой-либо внешний процесс Python (например, subprocess.popen) не может писать в эту папку, поскольку эта конкретная папка принадлежит www-data. Какое решение этой проблемы?

Что я сделал до сих пор (django является пользователем системы):

sudo chown django:django -R mysite/media/
sudo chgrp -R www-data mysite/media/
sudo chmod -R g+w mysite/media/

ls -la Результат media папка (медиа-папка содержит несколько других папок с целыми числами):

drwxr-sr-x  2 www-data www-data 4096 Jun  8 02:20 11
drwxrwsr-x  6 django   www-data 4096 Jun  7 18:15 10
drwxrwsr-x  5 django   www-data 4096 Jun  7 18:13 9
drwxrwsr-x  5 django   www-data 4096 Jun  7 18:11 8

Как видите, недавно созданная папка 11 принадлежит www-data не по django пользователь.

Что еще я пробовал:

Пожалуйста помоги!

Обновить

К сожалению Daniel решение также не работает для меня (все еще получаю IOError: [Errno 13] Permission denied). Вот результат команды getfacl mysite/site_media/:

Перед

# file: mysite/site_media/
# owner: django
# group: www-data
user::rwx
group::rwx
other::r-x

После (sudo setfacl -d -R -m g:www-data:rwx mysite/site_media/)

# file: mysite/site_media/
# owner: django
# group: www-data
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::r-x

Проблема была в общей памяти. это ответ помог это исправить.

Добавление none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0 в /etc/fstab починил это.

Вы можете использовать списки контроля доступа к файлам, в этом случае setfacl для установки разрешения файла по умолчанию, чтобы разрешить операцию записи для группы. Если вы добавили django в группу www-data, то с помощью следующей команды пользователь django получит разрешение на запись в любые файлы, принадлежащие пользователю www-data.

    setfacl -d -R -m g:www-data:rwx mysite/media/

Примечание: вам нужно будет установить acl пакет с использованием apt-get install acl если он не установлен. Убедитесь, что для вашего раздела также включен ACL - эта ссылка может помочь.

Я не полностью понимаю ваше описание проблемы, но думаю, что проблема в том, что он установил бит, т.е. 's' в:

drwxr-sr-x 

Посмотри на: http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories для описания написано лучше, чем я могу дать. В chmod страницу руководства тоже. В основном информацию ищите в сетгуде. Он ведет себя с каталогами иначе, чем с файлами.

Пытаться chmod g-s в медиа-каталоге, а затем создайте подкаталог в медиа и посмотрите, помешало ли это ему унаследовать неправильные разрешения. Если это так, вам просто нужно удалить бит setgid из всех других поддиректорий.

Для этого find ваш друг (может искать по группам владельцев и завивки)

Посмотрев на вывод вашего каталога, на разрешения каталога 11 если быть точным, я обнаружил, что apache создал его с правами на чтение группы, но не с правами записи группы. Поскольку вы можете захотеть, чтобы все пользователи в группе www-data чтобы иметь права на запись для этих файлов / каталогов, вам необходимо указать apache для создания файлов / каталогов с разрешениями групповой записи, которые можно выполнить, установив umask возможность WSGIDaemonProcess. Поскольку в документации говорится:

Обычно унаследованная маска umask будет 0022

у вас всегда не будет установленных разрешений на запись для группы. Все, что вам нужно в этом случае, это просто установить значение umask на 0002 и перезапустите apache. Вы можете решить эту проблему, просто запустив WSGIDaemon как пользователь django указав соответствующее имя пользователя.