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

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

У меня есть сервер ubuntu 11.10 с apache 2.2.20, php 5.3.6 и установкой Joomla cms. Я использовал дополнительный жесткий диск в качестве хранилища своего веб-сервера и смонтировал его в / data / www / (надеюсь, моя проблема не в этом!).

Я установил разрешение для всех файлов и папок в моем корневом веб-каталоге на 755, а группы пользователей для них установлены на [пользователь ubuntu по умолчанию (в моем случае радио)]: www-data.

В прошлые дни у меня были серьезные проблемы с тем, что joomla не показывала новые загруженные изображения и другие файлы, а также я не мог устанавливать какие-либо расширения. После нескольких часов поиска я обнаружил, что загруженные файлы не имеют соответствующих разрешений (это -rw -------) и приложение Joomla не может читать, копировать или перемещать их после загрузки.

Мне интересно, как я могу установить разрешение по умолчанию, чтобы все загружаемые мной файлы использовали его?

PS: Я тестировал umask, но ничего не помогло. Думаю, это не имеет отношения к моей проблеме.

Вы упомянули, что пробовали umask, и это не сработало, но ваша проблема звучит именно как umask. Может, ты сможешь вернуться к этому?

Вы, возможно, столкнулись с двумя ошибками, из-за которых вы могли подумать, что проблема не в umask:

  • Вам необходимо изменить маску пользователя, который загружает файлы, в большинстве случаев на вашем собственном сервере (а не на виртуальном хостинге) это будет пользователь веб-сервера; www-data на Ubuntu.
  • Вы должны изменить umask для пользователя в сценариях входа или в сценарии запуска apache, простой запуск его в сеансе SSH ни на что не повлияет, поскольку он будет активен только для этого сеанса.

Обратите внимание, что наличие разрешения на чтение группы / мира для файлов, принадлежащих www-data, является плохим - любое другое веб-приложение (в основном все на сервере) сможет читать такие вещи, как файлы конфигурации с паролями базы данных и т. Д. Лучшее решение - mod_suexec но затем вам нужно настроить PHP в режиме CGI и Apache MPM worker, это немного сложнее.

Понятия не имею о Joomla или ограничениях, с которыми вы можете иметь дело на виртуальной машине, но как насчет чего-то вроде:

sudo chown -R www-data:www-data /data/www
sudo chmod -R g+rws /data/www

Это рекурсивно устанавливает user: group на www-data: www-data с помощью chown, а часть g + s оператора chown гарантирует, что файлы, записанные любым разрешенным пользователем, сохранят группу владельца (GUID). R и w - обычные разрешения на чтение и запись.

Это то, что я использую в Ubuntu / Apache, но я считаю, что то же самое можно сделать и с пользователем (SUID). Может быть, кто-то еще может вмешаться, если у меня неправильный синтаксис, но я считаю, что что-то вроде:

sudo chown -R www-data:www-data /data/www
sudo chmod -R ug+rws /data/www

установит чтение / запись только для пользователя и группы и заставит файлы иметь www-data: www-data user: group.

Однако ознакомьтесь с SUID и GUID, так как, делая это, вы предоставляете другим пользователям разрешения www-data. Еще одно предостережение: если ваш диск смонтирован с установленным флагом nosuid, ничего из этого не сработает.

Вы пробовали ACL (списки контроля доступа)? Они позволяют создавать файлы с определенным разрешением файла в определенном каталоге. Я считаю, что это менее глобально, чем что-то вроде umask, которое, как мне кажется, установлено на глобальном уровне (кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь в разделе комментариев ниже). Вот ссылка на ответ, показывающий, как установить список управления доступом в каталоге. https://stackoverflow.com/a/6550059/893659.