selinux не позволяет выполнить доступ к файлу centos

Я хочу запустить службу Tomcat в CentOS с помощью командлета:

systemctl start tomcat.service

, но получаю сообщение об ошибке

Не удалось запустить Apache ExecStart = / opt / tomcat / bin / startup.sh (code = exited, status = 203 / EXEC).

и журнал с помощью команды:

Journalctl -xe 

заявляет, что

Selinux запрещает (artup.sh) выполнить доступ к файлу startup.sh

, учитывая, что я могу запустить любую другую службу на моем CentOS, в чем может быть проблема для моей службы tomcat?

Спасибо

2
задан 3 September 2020 в 21:53
1 ответ

SELinux ограничивает двоичные файлы, которые могут использоваться в ExecStart, путями, имеющими system_u:object_r:bin_t:s0 набор атрибутов. Обычно это каталоги /usr/bin /usr/sbin /usr/libexec /usr/local/bin.

Вам нужно переместить скрипт в один из этих каталогов или изменить политику selinux, чтобы позволить systemd использовать двоичные файлы в нужном месте, поскольку:

chcon -R -t bin_t /opt/tomcat/bin/

restorecon «отменит» вышеперечисленное лучше, чтобы обновить политику, например.

semanage fcontext -a -t bin_t "/opt/tomcat/bin(/.*)?"
restorecon -r -v /opt/tomcat/bin

ОБНОВЛЕНИЕ

Если двоичный файл java не находится в стандартном расположении (пользовательского дистрибутива JVM), вам также необходимо установить для него метку bin_t . Например, если ваша JVM установлена ​​в /opt/java, тогда:

semanage fcontext -a -t bin_t "/opt/java/bin(/.*)?"
restorecon -r -v /opt/java/bin

УВЕДОМЛЕНИЕ:systemd игнорирует переменную среды JAVA_HOME, если она не установлена ​​в файле модуля.

5
ответ дан 5 September 2020 в 14:26

Теги

Похожие вопросы