Запустите Tomcat7 от имени пользователя tomcat7 (или любого другого)

10

Каков будет рекомендуемый способ убедиться, что экземпляр Tomcat7 работает от имени пользователя tomcat7 (или любого другого)?

Я полагаю, что я могу изменить tomcat7-instance/bin/startup.shи tomcat7-instance/bin/shutdown.shдобавить 'su tomcat7' вверху.

В Tomcat6 я думаю, что это была переменная окружения TOMCAT6_USER.

Адриан Бер
источник
Если вы просите «безопасный путь», скорее всего, спровоцирует дебаты. Теперь, если вы спросите "как настроить другого пользователя для tomcat7?" это ответственно Кстати, tomcat начинается с пользователя tomcat, насколько я помню, если вы установили пакет deb ..
Braiam

Ответы:

13

Наиболее распространенным способом является установка стандартного tomcat7пакета с помощью apt-getи запуск его с помощью:

sudo service tomcat7 start

Пользователь и группа по умолчанию настроены так, /etc/default/tomcat7как вы можете видеть в этом фрагменте:

# Run Tomcat as this user ID. Not setting this or leaving it blank will use the
# default of tomcat7.
TOMCAT7_USER=tomcat7

# Run Tomcat as this group ID. Not setting this or leaving it blank will use
# the default of tomcat7.
TOMCAT7_GROUP=tomcat7
Дэвид Левеск
источник
TOMCAT7_USER и TOMCAT7_GROUP - это то, что я искал. Спасибо
Адриан Бер
Я изменил TOMCAT7_USER в tomcat7-instance / bin / setenv.sh и запустил сервер. Но если я отображаю процесс с помощью ps, пользователь не тот, который указан в TOMCAT7_USER.
Адриан Бер
Почему бы вам не изменить его прямо в /etc/default/tomcat7?
Дэвид Левеск
Допустим, у меня есть два пользовательских экземпляра Tomcat, и я хочу запустить их как разных пользователей.
Адриан Бер
Это сценарий, с которым я не знаком, но в этом случае я не думаю, что вы можете запустить Tomcat как службу, и вышеуказанный конфиг не применяется. Может быть, вы должны задать отдельный вопрос об этом.
Дэвид Левеск
11

РЕДАКТИРОВАТЬ: Пожалуйста, прочитайте комментарии ниже! Это решение не может быть применимо ко всем ситуациям.

Принятый ответ великолепен, но поскольку я запускаю Tomcat 7 в Ubuntu 14.04, мне нужно было сделать несколько дополнительных вещей, чтобы все заработало:

  1. Вам необходимо остановить службу tomcat перед редактированием файла /etc/default/tomcat7. Как только вы измените пользователя и группу, больше не будет возможности остановить службу, используя старого пользователя.
  2. Изменить пользователя и группу в файле /etc/default/tomcat7

  3. Вам необходимо изменить владельца папки /var/log/tomcat7и всех ее файлов. Обратите внимание, что преимущество состоит в том, чтобы хранить группу adm, чтобы все пользователи adm могли читать журналы.

    sudo chown -R newuser:adm /var/log/tomcat7

  4. Смена владельца папки /var/lib/tomcat7/webapps

    sudo chown -R newuser:newgroup /var/lib/tomcat7/webapps

  5. Если вы работаете на порте 80/443 в Ubuntu 14.04, вам нужно изменить владельца файлов authbind:

    sudo chown newuser /etc/authbind/byport/80

    sudo chown newuser /etc/authbind/byport/443

  6. Смена владельца рабочей папки

    sudo chown newuser:adm /var/cache/tomcat7

    sudo chown -R newuser:newgroup /var/cache/tomcat7/Catalina

  7. Сделайте конфигурационные файлы читабельными. Здесь у вас есть два варианта: Либо добавить нового пользователя в группу tomcat7:

    sudo usermod -a -G tomcat7 newuser

    ... или смените владельца конфигурационных файлов:

    sudo chown -R :newgroup /var/lib/tomcat7/conf/*

  8. Если у вас есть другие файлы, к которым обращаются ваши веб-приложения, такие как файлы конфигурации файлов журналов и т. Д., Вам также необходимо изменить владельца этих файлов.

  9. Теперь все должно быть готово снова запустить сервис с новым пользователем.

РЕДАКТИРОВАТЬ 2: После обновления до tomcat 8 и Ubuntu 18.04 появилась другая проблема при запуске tomcat от имени другого пользователя. В сценарии /etc/init.d/tomcat8следующая строка, по-видимому, изменяет домашнюю папку пользователя tomcat, но результат будет не тем, что вы хотите, если вы используете другого пользователя.

usermod --home /var/lib/tomcat8 $TOMCAT8_USER > /dev/null 2>&1 || true

Удаляя или комментируя эту строку, вы можете избежать изменения домашней папки для нового пользователя tomcat.

stenix
источник
Существует огромная проблема с вашим ответом. При следующем обновлении пакета tomcat7 (исправление безопасности / исправление ошибки) ваша установка будет нарушена, поскольку apt снова установит новую версию пакета tomcat7, используя того же пользователя (tomcat7). Таким образом, вы не можете делать автоматические обновления и должны помнить о chown после каждого обновления.
user323094
Я этого не осознавал, и у меня пока нет хорошего решения для этого. Любые предложения, кто-нибудь?
Стеникс
В Tomcat9 такого файла нет.
Стефан