Настройка пользователя ‘tomcat’ без прав администратора в Tomcat 8

Вопрос или проблема

Я установил Tomcat 8 на Debian 8 и мне нужно усилить безопасность веб-сервера.

Я следую официальной документации Tomcat, и в разделе о соображениях безопасности рекомендуется создать другого пользователя (имя tomcat) и запускать процесс Tomcat от этого пользователя:

Tomcat не должен запускаться от имени пользователя root. Создайте отдельного пользователя для процесса Tomcat и предоставьте этому пользователю минимально необходимые разрешения для операционной системы. Например, не должно быть возможности войти в систему удаленно с использованием пользователя Tomcat.

Я создал пользователя и группу tomcat, как указано в руководстве. Я создал файл /etc/systemd/system/tomcat.service с следующей конфигурацией:

[Unit]
Description=Контейнер веб-приложений Apache Tomcat
After=network.target

[Service]
Type=forking
#ExecStart=/opt/tomcat/bin/startup.sh
ExecStart=/usr/share/tomcat8/bin/startup.sh
#ExecStop=/opt/tomcat/bin/shutdown.sh
ExecStop=/usr/share/tomcat8/bin/shutdown.sh
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

Я создал символическую ссылку на:

root@pc:/lib/systemd/system# ln -s tomcat.service /etc/systemd/system/tomcat.service

Я включил службу в systemd:

root@pc:/lib/systemd/system# systemctl enable tomcat.service
Создана символическая ссылка от /etc/systemd/system/multi-user.target.wants/tomcat.service к /lib/systemd/system/tomcat.service.

Теперь, когда я проверил, запущен ли процесс tomcat, я не смог найти пользователя tomcat в качестве владельца процесса:

tomcat@labnet:/lib/systemd/system$ ps -aux | grep tomcat
tomcat8  18116  1.2  8.0 1662560 325140 ?      Sl   10:30   1:04 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.file=/var/lib/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC -Djava.endorsed.dirs=/usr/share/tomcat8/endorsed -classpath /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat8 -Dcatalina.home=/usr/share/tomcat8 -Djava.io.tmpdir=/tmp/tomcat8-tomcat8-tmp org.apache.catalina.startup.Bootstrap start

Есть другой пользователь с именем tomcat8.

Используя top:

tomcat@pc:/lib/systemd/system$ top
PID   USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM   TIME+   COMMAND
18116 tomcat8   20   0 1662560 325140  21068 S   0,3  8,0   1:04.29 java

Я проверил в /etc/groups, etc/passwd, и оба пользователя присутствуют:

tomcat@pc:/lib/systemd/system$ grep tomcat /etc/group
tomcat8:x:114:
tomcat:x:1005:tomcat

root@pc:/etc/tomcat8# grep tomcat /etc/passwd
tomcat8:x:108:114::/usr/share/tomcat8:/bin/false
tomcat:x:1005:1005:tomcat,,,:/home/tomcat:/bin/bash

Что мне следует изменить, чтобы использовать пользователя tomcat вместо этого? Мое предположение, что в этой версии по умолчанию для запуска процесса Tomcat используется новый пользователь.

Вам нужно выполнить systemctl daemon-reload, прежде чем systemd узнает о вашей новой службе Tomcat.

Ответ или решение

Чтобы настроить запуск Apache Tomcat 8 от имени пользователя "tomcat", а не "tomcat8", выполните следующие шаги:

  1. Создание пользователя и группы:
    Убедитесь, что вы создали пользователя и группу "tomcat" в системе. Вы можете использовать следующие команды в терминале:

    sudo groupadd tomcat
    sudo useradd -s /bin/false -g tomcat -d /home/tomcat tomcat
  2. Проверка конфигурации системы:
    Проверьте, что в /etc/passwd и /etc/group присутствуют записи для пользователя "tomcat". Например:

    grep tomcat /etc/passwd
    grep tomcat /etc/group
  3. Настройка файла службы systemd:
    Откорректируйте ваш файл /etc/systemd/system/tomcat.service, чтобы он содержал правильные команды и пути. Вот пример правильной конфигурации:

    [Unit]
    Description=Apache Tomcat Web Application Container
    After=network.target
    
    [Service]
    Type=forking
    User=tomcat
    Group=tomcat
    Environment=JAVA_HOME=/usr/lib/jvm/default-java
    Environment=CATALINA_HOME=/usr/share/tomcat8
    Environment=CATALINA_BASE=/var/lib/tomcat8
    ExecStart=/usr/share/tomcat8/bin/startup.sh
    ExecStop=/usr/share/tomcat8/bin/shutdown.sh
    RestartSec=10
    Restart=always
    
    [Install]
    WantedBy=multi-user.target

    Обратите внимание, что пути в ExecStart и ExecStop должны соответствовать вашим установкам Tomcat.

  4. Обновление конфигурации systemd:
    После внесения изменений в файл службы, обязательно выполните команду systemctl daemon-reload, чтобы система перезагрузила конфигурацию служб:

    sudo systemctl daemon-reload
  5. Включение и запуск службы:
    После обновления конфигурации вы можете включить и запустить службу Tomcat:

    sudo systemctl enable tomcat
    sudo systemctl start tomcat
  6. Проверка состояния:
    Теперь проверьте, работает ли Tomcat под правильным пользователем:

    ps -aux | grep tomcat

    Вы должны увидеть, что процесс Tomcat запущен от имени пользователя "tomcat".

  7. Дополнительные меры безопасности:
    Убедитесь, что у пользователя "tomcat" нет возможности удаленного входа в систему (используйте /bin/false в качестве шелла) и минимизируйте его права доступа к файловой системе Tomcat. Это можно сделать, установив правильные разрешения для директорий и файлов, связанных с Tomcat.

Следуя этим шагам, вы сможете настроить Tomcat 8 для работы от имени пользователя "tomcat", что повысит безопасность вашего сервера.

Оцените материал
Добавить комментарий

Капча загружается...