Как установить права доступа к файлам по умолчанию для Java

Вопрос: я ищу способ настроить Java для создания новых файлов с определенным набором разрешений по умолчанию.

Проблема. У меня есть приложение Spring Boot, которое использует следующее:

  • Log4J2 для ведения журнала
  • H2 для баз данных с плоскими файлами
  • Ehcache для кешированных сущностей

Все эти библиотеки создают новые файлы в локальной файловой системе, и когда они это делают, они создают файлы с возможностью записи для всех (666 для файлов и 777 для каталогов). Я видел это в macOS 10.13 (у пользователя «umask 0022») и на Amazon Linux (у пользователя «umask 0002»).

Если бы я непосредственно управлял созданием файлов, я мог бы делать то, что мне нужно, с PosixFilePermission, но поскольку создание файлов делегировано библиотекам, у меня нет такой возможности. Я потенциально мог бы установить таймер для обнаружения новых файлов и напрямую установить разрешения, но я не в восторге от такого подхода.

Log4J2 v2.9 добавил поле разрешений файла в RollingFileAppender , так что у меня есть надежда на одну из моих проблем, но я не могу найти что-то подобное для H2 или Ehcache. В идеале я хотел бы сделать это на уровне JVM/Boot для простоты и перспективности.


person chaserb    schedule 15.03.2018    source источник
comment
Что касается отрицательных голосов, если у вас есть отзывы по вопросу, я был бы признателен.   -  person chaserb    schedule 16.03.2018


Ответы (2)


Вот тема о tomcat и umask. Кажется, у tomcat есть собственное поведение, связанное с umask.

Так что, может быть, есть способ настроить «поведение umask» tomcat, встроенного в Spring Boot? Типа свойства или что-то в этом роде.

Я не могу притворяться, что это Ответ. Но, к сожалению, у меня недостаточно репутации, чтобы прокомментировать ваш вопрос. Надеюсь, это вам немного поможет.

person John    schedule 16.03.2018
comment
Спасибо за идею. Загрузил источник для tomcat, чтобы увидеть, что они делают с переменной среды UMASK. catalina.sh передает значение команде ОС umask, а затем дополнительно передает его в org.apache.catalina.security.SecurityListener в качестве системного свойства. SecurityListener.java просто проверяет, что значение больше некоторого минимума при загрузке. Ничто в java, кажется, не действует на информацию. Кажется, я также должен иметь возможность зависеть от umask ОС, но все файлы, которые я создаю, противоречат тому, что диктует umask. - person chaserb; 16.03.2018

Оказывается, это красная селедка. Проблема не в java, а в сервисной оболочке YAJSW, которая запускает java-процесс. YAJSW имеет несколько параметров для установки umask, в том числе для дочернего процесса, но они еще не реализованы. Запуск приложения за пределами YAJSW создает файлы, соответствующие маске пользователя.

person chaserb    schedule 16.03.2018