Execute o Tomcat7 como usuário do tomcat7 (ou qualquer outro)

10

Qual será a maneira recomendada para garantir que uma instância do Tomcat7 esteja sendo executada como o usuário tomcat7 (ou qualquer outro)?

Suponho que eu possa modificar tomcat7-instance/bin/startup.she tomcat7-instance/bin/shutdown.she adicionar 'su tomcat7' no topo.

No Tomcat6, acho que era a variável de ambiente TOMCAT6_USER.

Adrian Ber
fonte
Se você está pedindo o "caminho seguro", provavelmente provocará debates. Agora, se você perguntar "como definir um usuário diferente para o tomcat7?" isso é responsável. BTW, tomcat começa com tomcat usuário, até onde eu me lembro se você instalou o pacote deb ..
Braiam

Respostas:

13

A maneira mais comum é instalar o tomcat7pacote padrão apt-gete iniciá-lo usando:

sudo service tomcat7 start

O usuário e o grupo padrão estão configurados /etc/default/tomcat7como você pode ver neste trecho:

# 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
David Levesque
fonte
TOMCAT7_USER e TOMCAT7_GROUP era o que eu estava procurando. Graças
Adrian Ber
Modifiquei TOMCAT7_USER em tomcat7-instance / bin / setenv.sh e iniciei o servidor. Mas se eu exibir o processo usando ps, o usuário não é o especificado em TOMCAT7_USER.
Adrian Ber
Por que você não o modifica diretamente /etc/default/tomcat7?
precisa
Digamos que eu tenho duas instâncias de usuário do Tomcat e quero iniciá-las como usuários diferentes.
Adrian Ber
Esse é um cenário com o qual não estou familiarizado, mas, neste caso, não acho que você possa executar o Tomcat como um serviço e a configuração acima não se aplica. Talvez você deva fazer uma pergunta separada sobre isso.
precisa
11

EDIT: Por favor, leia os comentários abaixo! Esta solução pode não ser aplicável a todas as situações.

A resposta aceita é ótima, mas desde que eu executei o Tomcat 7 no Ubuntu 14.04, havia algumas coisas adicionais que eu precisava fazer para que tudo funcionasse:

  1. Você precisa parar o serviço tomcat antes de editar o arquivo /etc/default/tomcat7. Depois de alterar o usuário e o grupo, não será mais possível interromper um serviço usando o usuário antigo.
  2. Alterar o usuário e o grupo no arquivo /etc/default/tomcat7

  3. Você precisa alterar a propriedade da pasta /var/log/tomcat7e de todos os seus arquivos. Observe que é uma vantagem manter o grupo adm para que todos os usuários adm possam ler os logs.

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

  4. Alterar a propriedade da pasta /var/lib/tomcat7/webapps

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

  5. Se estiver executando na porta 80/443 no Ubuntu 14.04, você precisará alterar a propriedade dos arquivos authbind:

    sudo chown newuser /etc/authbind/byport/80

    sudo chown newuser /etc/authbind/byport/443

  6. Alterar a propriedade da pasta de trabalho

    sudo chown newuser:adm /var/cache/tomcat7

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

  7. Tornar os arquivos de configuração legíveis. Aqui você tem duas opções: Adicione seu novo usuário ao grupo tomcat7:

    sudo usermod -a -G tomcat7 newuser

    ... ou altere a propriedade dos arquivos de configuração:

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

  8. Se você tiver outros arquivos que seus aplicativos da web estão acessando, como arquivos de configuração de arquivos de log etc., também será necessário alterar a propriedade desses arquivos.

  9. Agora, tudo deve estar pronto para iniciar o serviço novamente com o novo usuário.

EDIT 2: Após a atualização para o tomcat 8 e Ubuntu 18.04, outro problema apareceu ao executar o tomcat como um usuário diferente. No script, /etc/init.d/tomcat8a linha a seguir parece alterar a pasta inicial do usuário do tomcat, mas o resultado não é o que você deseja se estiver usando um usuário diferente.

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

Ao remover ou comentar esta linha, é possível evitar a alteração da pasta pessoal para o novo usuário do tomcat.

stenix
fonte
Há um enorme problema com sua resposta. Após a próxima atualização do pacote tomcat7 (correção de segurança / correção de bug), sua configuração será interrompida porque o apt instalará a nova versão do pacote tomcat7 usando o mesmo usuário (tomcat7) novamente. Portanto, você não pode fazer atualizações autônomas e lembre-se de chown após cada atualização.
user323094
Eu não percebi isso e não tenho nenhuma boa solução para isso também no momento. Alguma sugestão, alguém?
stenix
Não existe esse arquivo no Tomcat9.
Stephane