Вопрос или проблема
Я установил 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", выполните следующие шаги:
-
Создание пользователя и группы:
Убедитесь, что вы создали пользователя и группу "tomcat" в системе. Вы можете использовать следующие команды в терминале:sudo groupadd tomcat sudo useradd -s /bin/false -g tomcat -d /home/tomcat tomcat
-
Проверка конфигурации системы:
Проверьте, что в/etc/passwd
и/etc/group
присутствуют записи для пользователя "tomcat". Например:grep tomcat /etc/passwd grep tomcat /etc/group
-
Настройка файла службы 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. -
Обновление конфигурации systemd:
После внесения изменений в файл службы, обязательно выполните командуsystemctl daemon-reload
, чтобы система перезагрузила конфигурацию служб:sudo systemctl daemon-reload
-
Включение и запуск службы:
После обновления конфигурации вы можете включить и запустить службу Tomcat:sudo systemctl enable tomcat sudo systemctl start tomcat
-
Проверка состояния:
Теперь проверьте, работает ли Tomcat под правильным пользователем:ps -aux | grep tomcat
Вы должны увидеть, что процесс Tomcat запущен от имени пользователя "tomcat".
-
Дополнительные меры безопасности:
Убедитесь, что у пользователя "tomcat" нет возможности удаленного входа в систему (используйте/bin/false
в качестве шелла) и минимизируйте его права доступа к файловой системе Tomcat. Это можно сделать, установив правильные разрешения для директорий и файлов, связанных с Tomcat.
Следуя этим шагам, вы сможете настроить Tomcat 8 для работы от имени пользователя "tomcat", что повысит безопасность вашего сервера.