Как разрешить военному приложению Tomcat писать в папке - PullRequest
1 голос
/ 30 июня 2019

Мне бы хотелось, чтобы у моего веб-приложения, развернутого как война ROOT.war, был доступ на запись к /var/www/html/static/images, чтобы он мог записывать загруженные и преобразованные изображения в эту папку, чтобы nginx мог обслуживать его статически.В настоящее время это не работает, вызывает исключение java.nio.file.FileSystemException вместе с сообщением Filesystem is read-only.

Но файловая система не только для чтения и находится в отличном состоянии.Папка уже была chmodded 777.

Дополнительная информация: установка tomcat выполняется на виртуальной машине Ubuntu 18.04 Azure с управляемым диском.Папка находится на диске, отформатированном в Ext4

1 Ответ

2 голосов
/ 01 июля 2019

Давайте начнем с: chmod 777 отлично подходит для тестирования, но абсолютно не подходит для реального мира, и вам не следует привыкать к этому параметру.Вместо того, чтобы правильно установить владельца / группу, перед тем как дать мировым разрешениям на запись.

Редактировать: Подобный вопрос только что появился в списке рассылки Tomcat, и Эммануэль Бур указал, что Debian Tomcat помещен в песочницу systemd.Прочитайте / usr / share / doc / tomcat9 / README.Debian , который содержит этот абзац:

Tomcat изолирован от песочницы systemd и имеет доступ только на запись в следующие каталоги:

  • / var / lib / tomcat9 / conf / Catalina (фактически / etc / tomcat9 / Catalina)
  • / var / lib / tomcat9 / logs (фактически / var / log / tomcat9)
  • / var / lib / tomcat9 / webapps
  • / var / lib / tomcat9 / work (собственно / var / cache / tomcat9)

    Если доступ для записи вдругие каталоги требуются, настройки сервиса должны быть переопределены.Это делается путем создания файла override.conf в /etc/systemd/system/tomcat9.service.d/, содержащего:

    [Service] ReadWritePaths = / путь / к / каталогу /

    Служба должна быть перезапущена после этого с помощью:

    systemctl daemon-reload systemctl restart tomcat9

Конец редактирования, продолжая с перехода, который не 'не решает проблему OP, но должен оставаться в:

Если - все проверено - Tomcat должен иметь доступ на запись в этот каталог, но не имеет, сообщение об ошибке указывает мне напредположение: может ли быть так, что

  • Tomcat работает как root?
  • Каталог монтируется через NFS?

Конфигурация по умолчанию для NFS:у этого root нет никаких прав на эту внешнюю файловую систему (или у него не было разрешения на запись? это память древней истории)

Если это условие соответствует тому, что вы используете, вам следует прекратить запуск Tomcat от имени rootи скорее руэто как непривилегированный пользователь.Затем вы можете установить разрешения для рассматриваемого каталога, чтобы он мог быть записан вашим пользователем tomcat и читался nginx, и все готово.

Запуск Tomcat от имени root - это путь к катастрофе: вы не хотите, чтобы процесс, доступный из Интернета, запускался с правами root.

Если эти условия не соответствуют вашей конфигурации: уточните конфигурацию.Я по-прежнему поддерживаю это описание для тех, кто может позже найти этот вопрос / ответ.

...