Изменение прав доступа к файлам Tomcat9

Я обнаружил, что права доступа к файлам изменились между Tomcat 8 и Tomcat 9, и я не могу понять, как это обойти.

У меня был такой код, где inputStream — это то, что я передаю этой процедуре, а redirectStream — это функция, которая просто использует потоки BufferedInput и BufferedOutput для чтения из одного потока в другой.

Path path = "/some/example/path/to/a/file"; Files.createDirectories(path.getParent()); redirectStream(inputStream, new FileOutputStream(path.toFile());

После выполнения этого фрагмента кода в Tomcat8 права доступа к каталогам и файлам будут соответствовать маске пользователя (0022). То есть каталоги будут иметь drwxr-xr-x, а файлы будут иметь -rw-r--r--. Поскольку эти файлы, которые он записывает, затем доступны в Интернете, необходим глобальный флаг чтения.

Но под Tomcat9 выдает тот же код, drwxr-x--- и -rw-r----- соответственно, и поэтому не виден в интернете. Я пробовал две вещи. Один я явно установил umask на 0022 в своем сценарии запуска tomcat, просто чтобы убедиться, что это не имеет никакого эффекта. Второй — явно установить разрешения в коде, чтобы попытаться вызвать проблему. Это исправило права доступа к файлу, но НЕ не права доступа к каталогу, и ниже приведен обновленный код.

Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.OWNER_EXECUTE);
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.GROUP_EXECUTE);
perms.add(PosixFilePermission.OTHERS_READ);
perms.add(PosixFilePermission.OTHERS_EXECUTE);
Files.createDirectories(path.getParent(), PosixFilePermissions.asFileAttribute(perms));

redirectStream(inputStream, new FileOutputStream(path.toFile()); 
perms = new HashSet<PosixFilePermission>();
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.OTHERS_READ);
Files.setPosixFilePermissions(fullPath, perms);

Что на самом деле исправляет права доступа к файлу, но НЕ права доступа к файлам каталогов. Я тестировал код вне Tomcat и поэтому знаю, что он работает. Но по какой-то причине среда Tomcat9 каким-то образом делает так, что каталоги по-прежнему получают ограниченные разрешения.

Любые идеи здесь?


person crowmagnumb    schedule 09.01.2018    source источник


Ответы (4)


использовать

экспортировать UMASK=0022 в setenv.sh.

См. https://tomcat.apache.org/tomcat-9.0-doc/changelog.html

person gardanflyer    schedule 11.04.2018
comment
Напротив, @phisch, gardanflyer воссоздал здесь почти все, что говорится в документации, на которую он указывает. И это сработало для меня! Спасибо! Я не уверен, почему настройка UMASK в моем конфигурационном файле выскочки не сработала, но сейчас я использую systemd, поэтому даже не собираюсь исследовать это. setenv.sh необходимо добавить в ваш каталог $CATALINA_HOME/bin (chmoded, чтобы он был исполняемым). Эта одна строка там работает. - person crowmagnumb; 11.04.2018

Значение umask можно напрямую изменить с 0027 на 0022 в самом файле catalina.sh, если у вас нет файла setenv.sh.

person Sabariya    schedule 17.02.2020
comment
setenv.sh никогда не присутствует в стандартной установке, и вам необходимо создать его (либо в CATALINA_HOME/bin, либо в CATALINA_BASE/bin). Изменение catalina.sh — плохая идея, так как никто не ожидает, что этот файл будет изменен. - person Piotr P. Karwasz; 25.03.2021

В системах на основе Debian вы можете добавить

UMASK=0022

до /etc/default/tomcat9. Затем перезапустите Tomcat, чтобы изменения вступили в силу.

person Bob    schedule 25.03.2021

Я использую tomcat 9 в Ubuntu 20.

Согласно https://ci.apache.org/projects/tomcat/tomcat9/docs/security-howto.html

Я создал файл setenv.sh в /usr/share/tomcat9/bin/ (который известен как $CATALINA_HOME),

затем я добавил UMASK=0022 в setenv.sh

В результате разрешение файлов, созданных tomcat, равно 644, что может быть прочитано другими пользователями группы.

person Jimru    schedule 29.03.2021
comment
Привет @Jimru, добро пожаловать в Stack Overflow. В принятом ответе уже указано изменение UMASK, однако другая информация, которую вы указали, будет полезна в принятом ответе - пожалуйста, обновите ее, включив в нее руководство по безопасности и результат 022, являющийся 644 в файлах. - person Mr R; 29.03.2021